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] ATmega1281 Bascom – konfiguracja i obsługa Timer4 w trybie CTC, ekran dotykowy ADC

LiutenetMaria 12 Lip 2012 13:40 2101 18
REKLAMA
  • #1 11097578
    LiutenetMaria
    Poziom 28  
    Posty: 1738
    Pomógł: 59
    Ocena: 210
    Witam,
    przeszedłem z ze 128 na 1281 (oba pod bascomem) i mam dwa problemy:
    1) Używam Ekranu Dotykowego, 4 przewodowego podłączonego do portu ADC.
    I ekran dotykowy działa do kilku dotknięć a później przestaje. Czy należy w Programie jeszcze coś zmienić?
    2) Zmieniłem Timer2 ze 128 na Timer4 w 1281.

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Czy dobrze obsługuje Timer4? Jest to zdaje się tryb CTC, ale gdzieś wyczytałem, że w Bascomie nie da się ustawić tryby CTC za pomocą wbudowanych "słów" typu config..
  • REKLAMA
  • #2 11102261
    LiutenetMaria
    Poziom 28  
    Posty: 1738
    Pomógł: 59
    Ocena: 210
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Zrobiłem taki program i w symulacji nie chodzi. Nie zwiększa się wartość rejestru TCNT4. Gdy zrobiłem to dla Timera1 działa tak jak chce.

    Dodano po 2 [godziny] 54 [minuty]:

    Nie wiem czy ja popełniam błąd czy to Bascom...
    Choć symuluję to na najnowszej wersji, ale kompiluje na starszej wersji, bo nowa ma ograniczenie do 4kb.
  • #3 11104037
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #4 11110692
    LiutenetMaria
    Poziom 28  
    Posty: 1738
    Pomógł: 59
    Ocena: 210
    MArSTER_1 napisał:
    Możesz zamieścić ten fragment kodu, który działa z Timerem1? I dlaczego stosujesz tryb Timer4 Compare Match A?

    Timera1 w 128 używam do PWM-u.

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Zaś dla testu napisałem na 1281 to i działa świetnie. Zaś z Timer1 i Timer4 mi nie wychodzi..
  • #5 11111341
    Konto nie istnieje
    Poziom 1  
  • #6 11111529
    LiutenetMaria
    Poziom 28  
    Posty: 1738
    Pomógł: 59
    Ocena: 210
    Bajki opowiadasz...

    Już powoli łape, ale jeszcze nie do końca.
    Błędem jest zapisanie Timer4=XXX, bo to nie zmienia wartości TOP w trybie CTC a wartość licznika.

    Należy zmienić wartość OCR2A, ale tej nie rozpoznaje mój kompilator, najnowsza wersja zaś rozpoznaje, ale ma ograniczenie.
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Teraz w tym programiku testowy dziele 16 bitów na 2x po 8bitów. Ale w docelowym programie niezbyt to działa.

    Co najdziwniejsze w jednej maszynie chodzi mój kod docelowy, wiec jakimś cudem skompilowało przypisanie ocr2A=XXX.
  • #7 11111534
    Konto nie istnieje
    Poziom 1  
  • #8 11111590
    LiutenetMaria
    Poziom 28  
    Posty: 1738
    Pomógł: 59
    Ocena: 210
    Zaraz podmienię, a co do kodu to nie edytuję go, tylko treść posty aby nie pisać jeden pod drugim...

    Podmiana nie działa.
  • #9 11111604
    Konto nie istnieje
    Poziom 1  
  • #10 11112086
    LiutenetMaria
    Poziom 28  
    Posty: 1738
    Pomógł: 59
    Ocena: 210
    Tak jak napisałem wyżej, nic to nie dało..
    Zastanawiam się nad kupnem nowej wersji Bascoma..
  • REKLAMA
  • #11 11112221
    Konto nie istnieje
    Poziom 1  
  • #12 11112266
    LiutenetMaria
    Poziom 28  
    Posty: 1738
    Pomógł: 59
    Ocena: 210
    Przecież pisze to wyżej:) Ma być CTC, i czy to ważne dlaczego?

    Ma być użyty dlatego, że Timer 1 to PWM, Timer 3 liczy czas między przerwaniami zewnętrznymi i wpisuje ten czas do wartości TOP Timera 2. Ale timer 2 jest 8 bitowy, wiec ucieka mi pewna wartość bo Timer3 jest 16bit. Timer4 jest również 16bit wiec powinno grac..

    Teraz działa to tak, że wartość z Timera3 jest przetwarzana i w obsłudze przerwania oc2 Timera2 jest przypisywana do wartości OCR2.
  • #13 11112296
    Konto nie istnieje
    Poziom 1  
  • #14 11113812
    LiutenetMaria
    Poziom 28  
    Posty: 1738
    Pomógł: 59
    Ocena: 210
    MArSTER_1 napisał:
    Wiesz co? Zanim zacznę konfigurować rejestry spójrz na stronę 136 PDF ATmegi 1281. Jest tam wymienionych kilka źródeł przerwań Timera4 ale nie ma takiego jak ty używasz czyli :"On Oc4a Timer4_int". Może najpierw wybierzesz sobie właściwą nazwę przerwania? Może potrzebujesz przerwania : "On OcF4a Timer4_int"?


    NIe wiem jakich pdf-ów TY używasz, ale ja na stronie 106 Datasheetu mam przerwanie $0054 Timer4 Compare A i w pliku m1281def mam OC4A= $054 ; Timer/Counter4 Compare Match A. Zresztą przerwanie mi chodzi i nie w tym sęk..
  • #15 11113976
    Fredy
    Poziom 27  
    Posty: 915
    Pomógł: 117
    Ocena: 28
    Ale Bascom przecież łyka instrukcje asm.
    Napisz mu np coś takiego:

    OCR4AH=00
    OCR4AL=12

    Sprawdź może też z małymi literami. Jeśli to nie zadziała to można podać mu to jako wstawkę asm. Być może nie opisali jeszcze tych rejestrów w tym kompilatorze.
  • #16 11114086
    Mundi1970
    Poziom 24  
    Posty: 342
    Pomógł: 96
    Ocena: 133
    Może tu jest problem:
    [Bascom] ATmega1281 Bascom – konfiguracja i obsługa Timer4 w trybie CTC, ekran dotykowy ADC
  • #17 11114140
    LiutenetMaria
    Poziom 28  
    Posty: 1738
    Pomógł: 59
    Ocena: 210
    Fredy napisał:

    Ale Bascom przecież łyka instrukcje asm.
    Napisz mu np coś takiego:

    OCR4AH=00
    OCR4AL=12

    Sprawdź może też z małymi literami. Jeśli to nie zadziała to można podać mu to jako wstawkę asm. Być może nie opisali jeszcze tych rejestrów w tym kompilatorze.


    Też tak zrobiłem, ale mam problem z podziałem 16 bitowej liczby na dwie 8bitowe.
    Nie wiem czy robię to poprawnie.
    Kod: text
    Zaloguj się, aby zobaczyć kod


    I w tym przykładowym programie niby to działa, ale w docelowym już nie bardzo.

    Dodano po 19 [minuty]:

    A ten kod już nie działa (zmiana wartości w obsłudze przerwania):
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Dodano po 25 [minuty]:

    Rejestr = 1
    Ocr4al = Low(rejestr) 'zapisanie 8 najmłodszyuch bitów
    Ocr4ah = High(rejestr)

    teraz testuję taki zapis.
  • REKLAMA
  • #18 11117204
    Fredy
    Poziom 27  
    Posty: 915
    Pomógł: 117
    Ocena: 28
    Dla świętego spokoju ten wpis w rejestr 16 bitowy bym zrobił przy wyłączonych przerwaniach. Zwróć uwagę że nie jest to operacja atomowa.
  • #19 11117897
    LiutenetMaria
    Poziom 28  
    Posty: 1738
    Pomógł: 59
    Ocena: 210
    Fredy napisał:
    Dla świętego spokoju ten wpis w rejestr 16 bitowy bym zrobił przy wyłączonych przerwaniach.

    Też tak robiłem, ale i tak nie było efektu.

    Na razie zaopatrzyłem się w najnowszą wersję BASCOMA i program testowy działa perfekcyjnie.
    Niedługo wgram go w maszynę i zobaczę efekty.

    EDIT:
    Wszystko działa pod najnowszą wersją bascoma.

Podsumowanie tematu

✨ Użytkownik przeszedł z mikrokontrolera ATmega128 na ATmega1281 i napotkał dwa problemy: z działaniem ekranu dotykowego oraz z konfiguracją Timer4. Ekran dotykowy działał tylko przez kilka dotknięć, co sugeruje potrzebę dodatkowej konfiguracji w programie. W przypadku Timer4, użytkownik próbował ustawić go w trybie CTC, jednak napotkał trudności z poprawnym przypisaniem wartości do rejestru OCR4A. W dyskusji poruszono również kwestie związane z konfiguracją rejestrów oraz użyciem przerwań. Ostatecznie, po zaktualizowaniu do najnowszej wersji Bascoma, problemy zostały rozwiązane, a program działał poprawnie.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA