ATmega128, problem z PORTG0 i PORTG1

Mar 18, 2015 1 Replies

Witam uprzejmie,



Tworzê program na ATmega128, który generuje w tym samym czasie w sumie na dziewiêciu pinach trzech ró¿nych portów kilkana¶cie impulsów. Impulsy generowane s± poprawnie na portach innych ni¿ PORTG. Na PORTG czasem (kilka razy na kilkadziesi±t wygenerowanych impulsów) tam, gdzie ustawiam jedynkê, pozostaje nadal zero. Czasem ustawiam zero, a pozostaje jedynka po poprzednim impulsie. Co mo¿e byæ przyczyn± problemów?



Czyta³em o tym, ¿e do PORTG nale¿y odwo³ywaæ siê inaczej ni¿ dla innych portów. Niemniej kompilator powinien sprawê za³atwiæ. Poza tym nie jest tak, ¿e na PORTG impulsy w ogóle nie s± generowane -- s± generowane, ale z opisanymi powy¿ej problemami. U¿ywam WinAVR oznaczonego jako 20030424. M103C jest wy³±czony. JTAGEN jest wy³±czony. SPIEN jest w³±czony. Do ustawiania i kasowania bitów u¿ywam sbi i cbi zdefiniowane jako (_SFR_BYTE(sfr) |= _BV(bit)) i (_SFR_BYTE(SFR) &= ~_BV(bit)).



Z góry dziêkujê za pomoc.



R.



Generowanie impulsów mam w funkcji obs³ugi przerwania. W g³ównym programie wy¶wietlam dane na LCD. Pin EN wy¶wietlacza to PORTG2. Gdy przesta³em wy¶wietlaæ dane na LCD, to impulsy zaczê³y dzia³aæ poprawnie tak¿e na PORTG. Wygl±da na to, ¿e operacje na PORTG nie s± atomowe. Co tu zrobiæ? Bo nie wiem, czy zastosowanie bloku ATOMIC nie odbije mi siê na wydajno¶ci.

R.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required