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

Komparatory w XMEGA128A3U tylko na jednym porcie zamiast dwóch

Janusz_kk 17 Sty 2018 22:15 1041 13
REKLAMA
  • #1 16968867
    Janusz_kk
    Poziom 39  
    Posty: 5851
    Pomógł: 226
    Ocena: 1470
    Temat stary ale problem nowy, walczę z atxmegą 128u3 zalutowaną na module X3-DIL64.
    Wg pdf-a mają one mieć 4 komparatory, po dwa na porcie A i B, okazuje się że mają tylko na porcie A,
    próbowłem różnych rzeczy, piny portu B są dobre bo wej i wyj działają a nie ma sygnałów na PB6 i PB7
    z komparatorów portu B, robiłem nawet generator z książki TMF-a układy peryferyjne i nie działają, musiałem
    obejść problem przez bezpośrednią defekcję stanów na porcie B bez komparatorów.
    Spotkał się ktoś z tym?
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Moderowany przez tmf:

    Prosze nie dopisywać się do nieswoich tematów i odgrzewać dyskusje archiwalne. Temat wydzieliłem.

  • REKLAMA
  • #2 16969539
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2205
    Wyłącz JTAG w MCU. Zajmuje PB4-PB7, czyli akurat m.in. wyjście z ACB.
  • #3 16969625
    Janusz_kk
    Poziom 39  
    Posty: 5851
    Pomógł: 226
    Ocena: 1470
    Ok ale powinien działać b6 a nie działa, dwa w właściwym kodzie jtag był wyłączony zresztą sekwencją z twojej książki :)
    więc to nie to. Tu mam inny kod który napisałem na sam komparator B
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Dodano po 4 [minuty]:

    A tu kod pierwotny, komparatory synchronizują liczniki resetując je, teraz zrobiłem to bez komparatorów
    ale pierwotny plan miałem z nimi. Wyłączenie jtaga jest w głównym pliku.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #4 16969646
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2205
    Nie dziwi mnie, że powyższy kod nie działa. AC_ACnOUT_bm są w CTRLA, nie CTRLB. Nie masz też ustawionego multipleksera wejść i odblokowujesz przerwanie,, a nie wiadomo, gdzie jest jego handler.
    Jeśli pokazujesz kod, to pokaż kompletny kod, który można analizować. Bo tak to możemy jeszcze 70 postów napisać zanim dojdziemy o co chodzi. Jeśli masz debugger, to najprościej sobie ustawić breakpointa i zobaczyć rejestry ACB.
    BTW, jaki masz poziom optymalizacji w gcc? W -O0, lub -O1 takie wyłączenie JTAGa może nie działać.
  • REKLAMA
  • #5 16970419
    Janusz_kk
    Poziom 39  
    Posty: 5851
    Pomógł: 226
    Ocena: 1470
    tmf napisał:
    AC_ACnOUT_bm są w CTRLA, nie CTRLB.

    Faktycznie z tym dałem ciała, ciekawe że avr studio nie wychwyciło tego błędu,
    ustawianie nieistniejących bitów w rejestrze. Jak będę miał chwilę to to sprawdzę,
    na razie działam inaczej i wszystko mi chodzi, więc do komparatorów nie wrócę
    bo juz mam zaprojektowaną płytkę a czas mnie goni. Na razie dzięki, później się odezwę.
    Pozdr
    Janusz
  • REKLAMA
  • #6 16970425
    es2
    Poziom 16  
    Posty: 226
    Pomógł: 8
    Ocena: 26
    Janusz_kk napisał:
    Faktycznie z tym dałem ciała, ciekawe że avr studio nie wychwyciło tego błędu,
    ustawianie nieistniejących bitów w rejestrze.

    A niby jak miało to wykryć?
    Do rejestry możesz zapisać stałą, możesz zapisać zmienną. Skąd kompilator ma wiedzieć co jest w tej zmiennej?
  • #7 16970491
    Janusz_kk
    Poziom 39  
    Posty: 5851
    Pomógł: 226
    Ocena: 1470
    Ale zapisywał stałą zdefiniowaną a nie dowolną liczbę. AC_AC0OUT_bm czy AC_AC1OUT_bm to są stałe zdefiniowane,
    a nie liczby z palca, więc kompilator ma wiedzę do jakich rejestrów one pasują, albo powinien mieć, tym bardziej że różnią
    się diametralnie, w ctrla są bity wyjścia, a w ctrlb jest ustawienie scalera.
  • #8 16970506
    es2
    Poziom 16  
    Posty: 226
    Pomógł: 8
    Ocena: 26
    Janusz_kk napisał:
    Ale zapisywał stałą zdefiniowaną a nie dowolną liczbę. AC_AC0OUT_bm czy AC_AC1OUT_bm to są stałe zdefiniowane,
    a nie liczby z palca, więc kompilator ma wiedzę do jakich rejestrów one pasują, albo powinien mieć, tym bardziej że różnią
    się diametralnie, w ctrla są bity wyjścia, a w ctrlb jest ustawienie scalera.

    Kolega nie za dużo wymaga od kompilatora?
    Jaki kompilator wyłapuje takie błędy?
  • #9 16970915
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2205
    Janusz_kk napisał:
    Ale zapisywał stałą zdefiniowaną a nie dowolną liczbę. AC_AC0OUT_bm czy AC_AC1OUT_bm to są stałe zdefiniowane,
    a nie liczby z palca, więc kompilator ma wiedzę do jakich rejestrów one pasują, albo powinien mieć, tym bardziej że różnią
    się diametralnie, w ctrla są bity wyjścia, a w ctrlb jest ustawienie scalera.


    Dla kompilatora to są zwykłe stałe. Nie ma szans, aby w C poinformować kompilator, że dana stała może być użyta wyłącznie w kontekście określonego rejestru. A przynajmniej nie da się tego zrobić łatwo. Oczywiście byłby to przydatny bajej, gdyby AS wychwytywało tego typu błędy. Zgłoś feature request - może uwzględnią:)
  • #10 16971249
    es2
    Poziom 16  
    Posty: 226
    Pomógł: 8
    Ocena: 26
    tmf napisał:
    Oczywiście byłby to przydatny bajej, gdyby AS wychwytywało tego typu błędy

    Byłby to pierwszy kompilator z taka funkcją. Tyle, że standard C czegoś takiego raczej nie przewiduje. Noi jak wykryć taki błąd:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #11 16971365
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2205
    es2 napisał:
    tmf napisał:
    Oczywiście byłby to przydatny bajej, gdyby AS wychwytywało tego typu błędy


    Byłby to pierwszy kompilator z taka funkcją. Tyle, że standard C czegoś takiego raczej nie przewiduje


    Dlatego nie pisałem o kompilatorze, tylko o AS, które mogłoby takie błędy wychwytywać poprzez analizę kontekstową kodu. Podobnie jak to zresztą już robi, przy podpowiadaniu składni. Są różne dodatki, np. Naggy, które podpowiadają gdzie jest błąd, więc dodanie kolejnego sprawdzenia nie jest niemożliwe. Problem raczej w tym, że Atmel, obecnie Microchip, musiałby przepisać nagłówki z definicjami, tak, aby dało się powiązać rejestry z konkretnymi, odnoszącymi się do nich definicjami.
  • REKLAMA
  • #12 16971395
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    Tyle że takie coś raczej nie byłoby błędem, a jedynie ostrzeżeniem. A patrząc ile _SETEK_ ostrzeżeń mają typowe projekty embedded, obawiam się, że kolejny by jedynie zginął w tłumie (;
  • #13 16974064
    Janusz_kk
    Poziom 39  
    Posty: 5851
    Pomógł: 226
    Ocena: 1470
    tmf napisał:
    Dlatego nie pisałem o kompilatorze, tylko o AS, które mogłoby takie błędy wychwytywać poprzez analizę kontekstową kodu.

    Ale to juz ociera się o sieci nuronowe, wg mnie można znacznie prościej, w pliku "H" do kazdego procka są zdefiniowane struktry każdego urządzenia gdzie są wymienione rejestry z których się składa, wystrczyłaby podefinicja rejestrów z jakich bitów czy grup się składają i żeby to IDE podpowiadało. Bo największym problemem xmeg jest terminologia, starą megę brałem pdf-a gdzie był rejestr i bity, wpisywało się bezpośrednio w program i działało, teraz przy xmegach trzeba się przebić jak się to może nazwać, np szukałem jak wyłączyć jtag-a, pierw próbowałem sam, porażka, potem google i guzik znalazłem, dopiero w książce TMF-a było jak to zrobić. Nawet przykładów od atmel-a teraz nie ma jak ściągnąć bo microchip zrobił burdel ze stroną a google widzi cały czas stare adresy. Wyżaliłem się ale walczę nad projektem i xmegą juz ponad miesiąc i czasami mam jej dość.
  • #14 16980673
    Janusz_kk
    Poziom 39  
    Posty: 5851
    Pomógł: 226
    Ocena: 1470
    Witam
    Mam kolejny problem, nie chodzi mi timer, siódmy, pozostałe 6 działa i nie mogę znaleść przyczyny,
    symulator nic nie pokazuje, rejestry nieustawione mają jakieś przypadkowe wartości, zrobiłem osobny programi na
    sam timer i nic, timer ma mi uruchomić przerwanie co 50mS tutaj teraz akurat tak nie będzie bo zegar
    jest 2M wew dlatego zmieniłem dzielnik na 1, ale w docelowym też mi nie wyzwala przerwania,
    widzę bo mam tam leda który ma mrugać, już tracę siły nad tym prockiem. Proszę o pomoc.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Dodano po 2 [minuty]:

    Tym
    // PORTE.OUTSET=0XFF;
    testowałem leda czy świeci, dlatego zaremowane.

Podsumowanie tematu

✨ Użytkownik zmaga się z problemem braku sygnałów z komparatorów na porcie B w mikrokontrolerze XMEGA128A3U, pomimo że dokumentacja wskazuje na ich obecność. Po wyłączeniu JTAG, który zajmuje piny PB4-PB7, problem nie został rozwiązany, a użytkownik musiał obejść problem, stosując bezpośrednią manipulację stanami na porcie B. W dyskusji poruszono również kwestie błędów w kodzie, w tym niewłaściwe przypisania do rejestrów oraz brak ustawienia multipleksera wejść. Użytkownik zauważył, że AVR Studio nie wychwyciło błędów w kodzie, co skłoniło do refleksji nad możliwościami kompilatorów w kontekście analizy błędów. W końcu, użytkownik zdecydował się na inne rozwiązania, ponieważ czas gonił, a projekt wymagał dalszej pracy.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA