piątek, 1 kwietnia 2011

AVR: Czyhające pułapki


Autor: Dondu

Ach, ci konstruktorzy mikrokontrolerów! Czasami można by sądzić, że specjalnie chcą utrudniać życie projektantom wykorzystujących ich mikrokontrolery. Oczywiście tak nie jest, ale początkujący programista może na tym wyjść jak Zabłocki na mydle :-)

Cóż więc za pułapki czekają na początkujących 
w mikrokontrolerach rodziny AVR produkcji Atmela?


Jeżeli uważasz, że są jeszcze jakieś inne pułapki w mikrokontrolerach AVR, o których informacja powinna się tutaj znaleźć, to zachęcam do pisania komentarza do tego artykułu, i jeżeli będzie to faktycznie interesujący przypadek, opracuję go i zamieszczę.

17 komentarzy:

  1. Proponuję dopisać jeszcze o obowiązkowym opóźnieniu jednego taktu przy obsłudze klawiatury matrycowej. Łatwo się na to złapać trudniej znaleźć błąd.

    OdpowiedzUsuń
  2. Właśnie sam się nadziałem na pułapkę nr 2 (bit URSEL) ... 2h stracone ... czasami powinienem czytać własne artykuły :D :D :D

    OdpowiedzUsuń
  3. Witam,
    Coś mi nie pasuje przykład dotyczący "bitów szalonych". Mamy na początku taki stan bitów 10000100 czyli TWINT jest wyzerowany a TWEN ustawiony, a nie jak to podano w opisie że ustawione były bity TWINT oraz TWEN.
    Kolejne kroki prowadzące do wpisania 1 na bicie TWEA pokazują że wszystko przebiegnie zgodnie z planem. Rejestr po tej operacji będzie miał stan 11000100, czyli bit TWINT nie został wyzerowany (przez wstawienie mu jedynki) bo już taki był przed operacją.
    Nie widzę więc tu żadnego zagrożenia....

    OdpowiedzUsuń
  4. Wartość 0b10000100 oznacza, że TWINT oraz TWEN są ustawione na 1. Nie rozumie, dlaczego uważasz, że TWINT nie jest ustawiony?

    OdpowiedzUsuń
    Odpowiedzi
    1. Szanowny Panie Dondu błagam, piszemy i mówimy "nie rozumiem". Koniecznie z "m" na końcu. Przepraszam ale nie wytrzymałem. Publikuje Pan bardzo wartościowe materiały, ma Pan ogromną wiedzę. Podziwiam Pana. Proszę jeszcze tylko pamiętać o tym drobnym szczególe w słowie "rozumiem". :-) Pozdrawiam

      Usuń
    2. Zdarzyła się literówka :)
      Również pozdrawiam!

      Usuń
  5. TWINT==1 oznacza że jest ustawiony na 1 co też zgodnzie z datasheetem oznacza że jest "cleared" czyli "wyczyszczony". Ale ok, może to kwestia nomenklatury.
    W każdym razie rejestr na początku był:
    10000100
    potem był
    11000100
    więc nie rozumiem co złego się zdarzyło skoro chciałeś ustawić 1 na TWEA bez zmiany pozostałych bitów. Tu mam problem.

    OdpowiedzUsuń
  6. Aby uściślić tę nomenklaturę: Bit TWINT nie jest zanegowany. Gdy jest ustawiony (ma wartość 1) oznacza, że wystąpiło przerwanie z TWI. Gdy jest zerem oznacza, że przerwanie nie wystąpiło. Natomiast zanegowany jest jedynie proces jego kasowania.

    Przykład który podajesz ma dwa akapity dalej komentarz:

    "W przypadku bitu TWEA jedynka zostanie poprawnie ustawiona."

    Dlatego Ci nie pasuje :)


    OdpowiedzUsuń
  7. Żeby nie było - blog mi się bardzo podoba i cieszę się że przekazujecie tutaj, szanowni Autorzy, kawałek dobrej wiedzy :)

    Sposób kasowania bitu TWINT oczywiście jest jasny i wynika z opisu producenta, chociaż rzeczywiście z uwagi na niestandardowość może powodować problemy. Sam przykład jednak do mnie nie trafił:)
    Pozdrawiam

    OdpowiedzUsuń
  8. Przeczytałem jeszcze raz i teraz już jest jasne. Sorry za zamieszanie:)

    OdpowiedzUsuń
  9. Dziękuję za opinię.

    Co do przykładu - skoro nie trafił to znaczy, że powinienem przeczytać artykuł jeszcze raz w całości i zastanowić się nad jego rozumieniem przez czytelników - zapiszę na listę TODO :-)

    Pozdrawiam!
    Jacek

    OdpowiedzUsuń
  10. Pisaliśmy w tym samym momencie :-)
    Cieszę się, że wszystko się wyjaśniło - powodzenia w realizacji projektów!

    OdpowiedzUsuń
  11. Spokojnie skreśl to z TODO:)
    A dzięki dyskusji, teraz już o tym będę długo pamiętał, więc cel edukacyjny został osiągnięty w 100%:)
    Powodzenia!

    OdpowiedzUsuń
  12. Ten komentarz został usunięty przez administratora bloga.

    OdpowiedzUsuń
  13. Do Anonima:
    Cyt: "Hmm, niedawno rozpoczełem przygodę z i2c więc ..."

    Twój post przeniosłem do właściwego (jak sądzę tematu: tutaj



    OdpowiedzUsuń
  14. Są też inne wredne pułapki: np. sam wpadłem w taką - Atmega ma rozkaz MUL, a AtTiny nie ma :-)

    OdpowiedzUsuń