piła na wyjściu AVR?

Nov 19, 2012 9 Replies

Problem jak zwykle pewnie banalny ale wymiękłem :P Na wyjściu z AVRa (MEGA162), gdzie powinienem mieć piękny sygnał zegarowy dla PGA2310 po software'owym SPI ale chwilowo jest nic niepodłączone mam cś takiego:

formatting link
z którego to wychodzi (dolna połówka portu C) zainicjowany poprawnie, zresztą wcześniej działało to i dawało elegancki przebieg a w kodzie nic się nie zmieniło. Procek zmieniony, dalej to samo. Nic też nie wskazuje na jakąś globalną usterkę AVRa tudzież oscyloskopu bo przebieg z wyjścia TXD jest elegancki, prostokątny. Zgłupiałem do reszty



/

Powitanko,

A z jakims obciazeniem? Bo wyglada, jakby jakas pojemnosc sie rozladowywala nie majac za bardzo przez co.

Pozdroofka, Pawel Chorzempa

W dniu 2012-11-19 23:25, badworm pisze:

Jesteś pewien, że to ten sam wsad procesora? Mnie to wygląda, że port jest ustawiony na wejście(DDRC dla tego bitu=0), a rejestrem danych kluczujesz między pull-up a Hi-z.

Pozdrawiam, Paweł

Wygląda jakby "w dół" sygnał był ciągnięty tylko jakimś pull-down. Po mojemu zamienione DDR i PORT.

Dnia Tue, 20 Nov 2012 17:22:56 +0100, Michoo napisał(a):

Ok, znalazłem rozwiązanie, nie trafiłeś choć byłeś blisko. Najpierw miałem coś takiego: DDR(SPI_PORT)=1<<SPI_CS | 1<<SPI_SCK | 1<<SPI_MOSI; a kilka linijek dalej DDR(MUTE_PORT)=1<<MUTE_OUT; przy czym SPI_PORT i MUTE_PORT to to samo. Zebranie tego w jeden wiersz: DDR(SPI_PORT)=1<<SPI_CS | 1<<SPI_SCK | 1<<SPI_MOSI | 1<<MUTE_OUT; rozwiązało problem. Dzięki za podpowiedź, tak coś czułem, że piny odpowiedzialne za soft-spi mogą pracować jako wejścia ale nie mogłem znaleźć gdzie robię błąd.

Na przyszłość imo lepiej zrobić makra pokroju SET_BITS(port,bits) port|=bits CLEAR_BITS(port,bits) port&=!(bits) TOGGLE_BITS(port,bits) port^=bits

mniejsza szansa, ze się operator = gdzieś "omsknie".

Zgadza się. &=~ Palec mi się omsknął.

Z ciekawości - wiesz (Ty albo ktoś), dlaczego akurat tak wygląda wykres? Na moje oko to właśnie dla Hi-Z powinny być szumy i jakieś piły z pinów obok, a dla pull-up powinna być stabilna jedynka. Na tym RIGOL-u masz to zainwertowane?

Swoją drogą (1<<bit), w avr/io.h masz makro _BV(), IMO programy wtedy są czytelniejsze.

"Jedynka" robiona przez pull-up właśnie jest stabilna, widać że narasta bardzo szybko. Za to Hi-Z na porcie to tak na prawdę pull-down przez sondę oscyloskopu (10MOhm?). Pojemności układu i samej sondy rozładowują się wtedy dłużej niż trwa naładowanie przez pull-up. To dlatego przebieg nie schodzi do zera - te zęby to nie "popsuta" jedynka, tam powinna być seria impulsów 1,0,1,0...

Pozdrawiam, Paweł

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required