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

Bascom, avr90s2313, AVT3500, Timer0 niechce działać

tolkin30 31 Sie 2007 22:36 1554 5
REKLAMA
  • #1 4237629
    tolkin30
    Poziom 11  
    Posty: 20
    Jestem początkujący, studiuje Oślą Łączkę z EdW, zainstalowałem najnowszą wersie Bascoma Demo.
    Kupiłem płytkę AVT3500, złożyłem ją i wszystko działa poprawnie aż do tematu liczniki i niebogę załadować programu przykładowego, bo nie chce się wykonać funkcja ON TIMER0, gdy ją skasuje to program się ładuje, ale bez niej nie zadziała, a jeśli ona jest to pasek postępu zatrzymuje sie po 30% i nic.
    W innych programach, gdy tylko jest ta funkcja dzieje sie to samo.
    To jest ten program:
    'C012a      Bardzo prosty stoper 0,1-sekundowy
    Dim Dziesek As Byte , Sekjed As Byte , Sekdzies As Byte , Minjed As Byte
    Dim 100ms As Byte , Ktorywysw As Byte , Licz As Bit
    Config Portb = 255 : Portb = &B11111111 : Config Portd = &B1111100 : Portd = &B1111111
    Config Timer0 = Timer , Prescale = 64 : Enable Interrupts : Enable Timer0
    Dziesek = 0 : Sekjed = 0 : Sekdzies = 0 : Minjed = 0
    On Timer0 Co4ms
    
    Do : Loop : End          'to jest główny program - pusta nieskończona pętla
    
    Co4ms:                   'procedura obsługi przerwania od Timera T/C0 wykonywana co 4ms
    Timer0 = 6               'załaduj do Timera0, żeby zliczył 250 (=256-6) impulsów
    If Pind.0 = 0 Then Licz = 1       'sprawdź stan S1 i ewentualnie rozpocznij zliczanie czasu
    If Pind.1 = 0 Then Licz = 0       'sprawdź stan S2 i ewentualnie zakończ zliczanie czasu
    If Licz = 1 Then         'tylko wtedy, gdy stoper ma liczyć czas
       Incr 100ms            'co 4ms zwiększ wartość licznika o nazwie 100ms
       If 100ms = 25 Then    'skróc cykl licznika 100ms właśnie do 100ms
          100ms = 0          'czyli 0,1 sekundy
          Incr Dziesek       'co 0,1s zwiększ stan licznika dziesiatych części sekundy
          If Dziesek = 10 Then       'ten licznik liczy do dziesieciu
             Dziesek = 0     'czyli cykl trwa 1 sekundę
             Incr Sekjed     'co 1 sekundę  zwiększ licznik jednostek sekund
             If Sekjed = 10 Then
                Sekjed = 0   'co 10 sekund
                Incr Sekdzies       'zwiększ stan licznika dziesiatek sekund
                   If Sekdzies = 6 Then       'liczy do 6 bo minuta ma 60 sekund
                      Sekdzies = 0
                      Incr Minjed       'co 60 sekund zwiększ stan licznika minut
                         If Minjed = 10 Then Minjed = 0       '0...9 minut
                   End If    'więc maksymalny stan licznika to:
             End If          '9 minut, 59 sekund i 9 dziesiatych sekundy
          End If
       End If
    End If
    Incr Ktorywysw : If Ktorywysw = 4 Then Ktorywysw = 0       'skróć cykl: 0...3
    Portd = &B1111111        ' wygaś wyświetlacze
    Select Case Ktorywysw    ' obsługa wyświetlacza
    Case 0:                  'wyświetl zawartość licznika jednostek
       Portb = Lookup(dziesek , Tabela)       'najpierw przepisz do PortB kody
       Portd.3 = 0           'potem włącz T3 - wyświetlacz jednostek
    Case 1:                  'wyświetl zawartość licznika dziesiątek
       Portb = Lookup(sekjed , Tabela)       'najpierw przepisz do PortB kody
       Portb.7 = 0           'włącz punkt dziesiętny
       Portd.4 = 0           'potem włącz T4 - wyświetlacz dziesiątek
    Case 2:                  'wyświetl zawartość licznika setek
       Portb = Lookup(sekdzies , Tabela)       'przepisz do PortB kody
       Portd.5 = 0           'włącz T5 - wyświetlacz setek
    Case 3:                  'wyświetl zawartość licznika tysięcy
       Portb = Lookup(minjed , Tabela)       'przepisz do PortB kody
       Portb.7 = 0           'włącz punkt dziesiętny
       Portd.6 = 0           'włącz T6 - wyświetlacz tysięcy
    End Select
    Return                   'koniec procedury obsługi przerwania
    
    Tabela:                  'potrzebna do wyświetlenia cyfr 0...9
    Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144


    Może to coś w ustawieniach Bascoma, albo mikroprocesor jest uszkodzony, chociaż mam dwa i na obu jest to samo.
    Ma ktoś jakąś propozycje

    Poprawiłem post, korzystaj z tagów "Code". [c_p]
  • REKLAMA
  • #2 4238374
    elektroziom
    Poziom 20  
    Posty: 337
    Pomógł: 40
    Ocena: 122
    Skoro nie chce Ci sie załadować program, na dole powinien wyskoczyć Ci błąd..jakiej on jest treści? kompilator może Ci wskazywać na polecenie "On Timer0 Co4ms" bo może w tej etykiecie jest jakiś błąd..sprawdź ilość warunków "If" w tej etykiecie oraz poleceń kończacych warunek "end if"..naliczyłem sie 8 warunków..i 5 zakończeń..spróbuj dodać zakończenia..może pomoże i jeszcze w tym warunku nie ma zakończenia..
    "Incr Ktorywysw : If Ktorywysw = 4 Then Ktorywysw = 0 'skróć cykl: 0...3 "..mi też nie chciał sie skompilować bo brakowało zakończeń..pozdr ;)

    Dodano po 4 [minuty]:

    Napisałeś że masz Bascom Demo..ten program jest napisany pod BascomAVR..chyba nie pomyliłeś programów..u mnie skompilował sie bez problemu ;)
  • REKLAMA
  • #3 4239675
    tolkin30
    Poziom 11  
    Posty: 20
    Spróbowałem wszystkiego, zamknąłem warunki i zaczął mi zwracać błędy przy kompilacji. Chodzi oto, że program się kompiluje, ale jest problem z zładowaniem go do procesora,
    Pisząc Bascom Demo miałem na myśli Bascom AVR DEMO.
    Jak już pisałem to wszystko przez ten Timer0, a konkretnie On Timer0 Co4ms, gdy wykasuje tą linijkę z włączeniem tajmera to program się załaduje cały jak nie to się zatrzymuje i czeka niewiadomo na co, gdy nacisnę Esc aby przerwać proces to wyskakuje małe okienko zatytułowane BASCOM AVR z napisem Difference at 00080 i przyciskiem OK
    Mam kilka innych przykładowych programów z wykorzystaniem funkcji Timer0 i wszędzie jest tak samo.
    Sprawdziłem na dwóch procesorach.
  • REKLAMA
  • REKLAMA
  • #6 4241028
    tolkin30
    Poziom 11  
    Posty: 20
    Spróbowałem komędy Start Timer0, ale wyskakiwał mi błąd w Bascomie,
    Spróbowałem też zmienić procesor na ATiny2313 i Baskom niechciał mi go załadować, próbował zmieniać opcje, ale nie udało mi sie znaleźć odpowiedniej konfiguracji lub po prostu to jest niemożliwe.
    Ale wpadłem na pewną myśl, skompilowałem program w początkowej wersji w Bascomie i przeszłem do PonyProg, ustawiłem opcje i załadował się, najpierw do AT90S2313, wszystko zadziałało, spróbowałem potem z ATiny też działało, ale pewnie przez jakąś inną konstrukcje wewnętrzną wyświetlacz miał jakąś szybszą częstotliwość odświeżania, lecz to nie ma znaczenia ważne, że mogę iść dalej z nauką programowania,

    Dzięki wszystkim za pomoc!!!
REKLAMA