logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[BASCOM]Kod z AT90S2313 nie działa na ATTiny2313

mazomen 01 Mar 2009 22:30 2132 6
  • #1 6223976
    mazomen
    Poziom 16  
    Witam.
    Na początku chciałbym zaznaczyć że dopiero zaczynam "przygodę" z mikroprocesorami. Jestem w trakcie przerabiania materiału z książki Pana Góreckiego "Mikroprocesory dla początkujących". Doszedłem do ćwiczenia 29. Generator impulsów- tryb porównywania i natknąłem się na pewien problem. Otóż na portb.3 (oc1) powinien pojawić się sygnał o częstotliwości i długości impulsu ustawionym przez mikroprocesor i obrazowany przez podłączoną do tego portu diodę. U mnie dioda ta wogóle nie świeci i to przy żadnych ustawieniach długości impulsu.

    Używam ATtiny2313 zamiast AT90S2313 oraz BASCOM AVR 1.11.8.1

    Bardzo proszę o pomoc

    Poprawiłem tytuł - regulamin p.11.1 , p.11.2
    [zumek]
  • #3 6224102
    janbernat
    Poziom 38  
    ATtiny2313 to nie jest to samo co AT90S2313.
    Ściągnij noty katalogowe z Atmela i porównaj rejestry.
    BASCOM AVR 1.11.8.1 mógł jeszcze nie obsługiwać dobrze wszystkich funkcji dla ATtiny2313.
    Przynajmniej ja tak miałem w starszej wersji Bascoma
    ale już nie pamiętam w której.
    Ściągnij ze strony MCS wersję BASCOM AVR 1.11.9.3 może pomóc.
    Nowszą wersję ściągnąłem dopiero wczoraj i nie wiem jeszcze czy w ATtiny2313 wszystko obsługuje.
  • #4 6224110
    mazomen
    Poziom 16  
    Oto kod jednego z programów z którym mam problemy:
    
    'C029f.bas          Generator impulsów prostokątnych
    ' UWAGA! Wejsciem EN(able) modułu LCD steruje końcówka PB.1
    ' do wyjscia PB.3 dołączona przez rezystor 1k anoda diody LED (katoda do masy)
    Dim Impuls As Word , Przerwa As Word , Czas As Single , Zmiana As Bit , Napis As String * 9
    Config Timer1 = Timer , Prescale = 256 , Compare A = Toggle , Clear Timer = 1
    On Compare1 Wpis Nosave                                     'po przerwaqniu od COMPARE1 skocz do procedury Wpis
    
    Cls : Lcd "Cwiczenie 29f" : Wait 2                          'na początek pracy programu jednorazowo
    Portd = 127                                                 'podciągnij wejścia, w tym PD.0 i PD.1 - umożliw pracę przycisków S1, S2
    Przerwa = 15625 : Impuls = 6250 : Gosub Wyswietl            'początkowo - przerwa  1s, impuls - 400ms
    Compare1a = Przerwa : Timer1 = 0 : Portd.3 = 0              'T/C1 niech liczy od zera, zgaś diodę
    Enable Interrupts : Enable Compare1a                        'dopiero teraz odblokuj przerwanie COMPARE1
    
    Do                                                          'główna pętla programu
    If Pind.0 = 0 Then                                          'jeśli naciśniety S1
       Incr Przerwa                                             'zwiększ czas przerwy
       Zmiana = 1                                               'ustaw flagę Zmiana
    End If
    If Pind.1 = 0 Then                                          'jeśli naciśniety S1S2
       Incr Impuls                                              'zwiększ czas impulsu
       Zmiana = 1                                               'ustaw flagę Zmiana
    End If
    If Zmiana = 1 Then                                          'wyświetl
       If Pind = 127 Then
          Gosub Wyswietl                                        'ale dopiero po zwolnieniu przycisków
          Zmiana = 0                                            '       jednorazowo
       End If
    End If
    Waitus 200                                                  'szybkość zmian czasów
    Loop : End                                                  'koniec pętli głównej
    
    Wpis:                                                       'obsługa przerwania COMPARE
    If Pinb.3 = 0 Then                                          'nie można Portb.3, tylko właśnie Pinb.3
       Compare1a = Przerwa
       Else
       Compare1a = Impuls
    End If
    Return
    
    Wyswietl:                                                   'procedura wyświetlania wyniku
       Disable Interrupts                                       'zablokuj przerwania, żeby spokojnie wyświetlić wyniki
       Czas = Impuls * 0.064                                    'oblicz czas impulsu w milisekundach
       Napis = Fusing(czas , "#.###")                           'zaokrąglij wynik - trzy miejsca po przecinku
       Cls : Lcd "ON =" ; Napis ; "ms  "                        'wyświetl czas impulsu
       Czas = Przerwa * 0.064                                   'oblicz czas przerwy w milisekundach
       Napis = Fusing(czas , "#.###")                           'zaokrąglij wynik - trzy miejsca po przecinku
       Lowerline : Lcd "OFF=" ; Napis ; "ms  "                  'w dolnej linii wyświetl czas przerwy
       Enable Interrupts                                        'umożliw normalną pracę generatora
    Return


    A jeśli chodzi o noty katalogowe to problem w tym że nie znam angielskiego (w szkole miałem niemiecki :/) a polskich not jeszcze nie znalazłem.

    Proszę stosować znaczniki [code] - uzupełniłem.
    [zumek]
  • #5 6224421
    janbernat
    Poziom 38  
    Zaraz Ci moderator wstawi uwagę kod.
    Kod się wkleja przez "kod"
    Jeśli nie uczyłeś się angielskiego to i tak musisz się go nauczyć w stopniu podstawowym jeżeli chcesz zajmować
    się elektroniką.
    To jak łacina w średniowieczu-cywilizowany człowiek zna chociaż 500 słów.
    Są translatory w googlu i słowniczki- zawsze coś.
    A opisy rejestrów są w wielu książkach po polsku-jak załapiesz o co chodzi to i angielski będzie zrozumiały.
    "Mikrokontrolery ATtiny w praktyce"-R. Baranowski
    "Programowanie mikrokontrolerów AVR w języku Bascom"-M. Wiązania.
    A jak wkleisz dobrze kod to pewnie ktoś mądrzejszy
    Ci coś wyjaśni.

    Regulamin p.8.4
    [zumek]
  • Pomocny post
    #6 6224737
    Konto nie istnieje
    Poziom 1  
  • #7 6226005
    mazomen
    Poziom 16  
    Wielkie dzięki atom1477. Po dopisaniu linijki kodu DDRB.3 = 1 program zaczoł działać. Nie musiałem nawet zmieniać BASCOMA.

    Jeszcze raz wielkie dzięki za pomoc :)
REKLAMA