Użytkownik Grzegorz Kurczyk napisał:
Ale faktycznie budowa portu w ATmega48/88 daje taką praktyczną możliwość. Ale wracając do zagadki, to spróbujmy wycisnąć te 8MHz z pinu na ATmega8/32/64 itp.
Pozdrawiam Grzegorz
Użytkownik Grzegorz Kurczyk napisał:
Ale faktycznie budowa portu w ATmega48/88 daje taką praktyczną możliwość. Ale wracając do zagadki, to spróbujmy wycisnąć te 8MHz z pinu na ATmega8/32/64 itp.
Pozdrawiam Grzegorz
Sirtap napisał(a):
Schemat posiadam ale tylko w wersji papierowej :( A skanera już niestety nie posiadam. Zresztą nie ma co kombinować - kit ze wszystkimi gratami kosztuje koło 90 PLN i masz wszystko w komplecie, łącznie z obudową i krokodylkami do kabelków. Wystarczy dorobić tylko kabel łączący i kabelki do analizatora i wszystko. Jak liczyłem samemu od początku jakby składać to wyszło niewiele taniej, a jeszcze trzeba zrobić płytkę, zaprogramować procek itepe.
Grzegorz Kurczyk napisał(a):
Zapomniałem dodać - mi chodzi o coś bez zewnętrznej elektroniki(poza układami dopasowującymi poziom i ew. formującymi sygnał) a przy okazji bardzo taniego :-) Cała inteligencja tego urządzenia ma się kryć w sofcie na PC.
Według książki 'mikrokontrolery avr, atmega w praktyce' jest to możliwe w ATmega88/165/169/325. Według datasheeta do atmega32 porty PINx są read-only, a ich zapis nic nie powoduje (co innego w atmega325 i itp).
Użytkownik Grzegorz Kurczyk napisał:
No to zarabiam na to drugie piwo :-) Oczywiście trzeba do tego zastosować instrukcję OUT. Przykład dla wspomnianego bitu PB1
; zapamiętujemy stan PORTB coby nie wajhlować pozostałymi bitami :-) IN R16, PORTB MOV R17, R16 ; przygotowujemy maski bitów dla PB1 ORI R16, b00000010 ANDI R17, b11111101 ; i wajhlujemy bitem PB1 :-) OUT PORTB, R16 OUT PORTB, R17 OUT PORTB, R16 OUT PORTB, R17 OUT PORTB, R16 OUT PORTB, R17 . . . OUT PORTB, R16 OUT PORTB, R17
W prockach ATmega48/88 itp. raczej nie uda się uzyskać 16MHz przez ustawianie OUT-em bitu w porcie PINB ponieważ jeden rozkaz OUT PINB zmieni stan pinu na przeciwny - czyli uzyskamy dokładnie to co w powyższym programie. Ale tego nie testowałem, bo nie mam pod ręką takiego procka.
Tak przy okazji zastanawiałem się nad poprzednimi przykładami: Proponowana przez Kolegę sekwencja rozkazów... SBI PINB,1 ; zmień z 0 na 1 SBI PINB,1 ; zmień z 1 na 0 SBI PINB,1 ; zmień z 0 na 1 SBI PINB,1 ; zmień z 1 na 0
da w zasadzie dokładnie to samo co
SBI PORTB,1 ; ustaw 1 CBI PORTB,1 ; ustaw 0 SBI PORTB,1 ; ustaw 1 CBI PORTB,1 ; ustaw 0
każdy rozkaz zajmuje dwa takty zegara więc na wyjściu pojawi sie 4MHz.
Pozdrawiam Grzegorz
Nie, to nie tak dziala. OUT PINB robi toggle bitu w taki sposob, ze jesli np. bit 0 ma wartosc 0 i teraz zrobimy out pinb,1 to stan tego portu na chwile zmieni sie na 1 i SAM wroci do 0. Czyli niejako jedna instrukcja zalatwia nam dwie. Dlatego sekwencja :
nie jest rownowazna sekwencji:
Dlatego teoretycznie mozna by uzyskac 16MHz. Problem w tym, ze w datasheecie nie podaja dokladnie kiedy zmieniaja sie stany portu. Wydaje sie, ze w drugiej polowie cyklu zegara stan portu powinien sie zmienic, ale zupelnie nie mam pojecia kiedy wraca do stanu wyjsciowego. Musze to podejrzec na oscyloskopie.
Użytkownik T.M.F. napisał:
Hmmmm... jak patrzę na schemat budowy portu w ATmega48/88 (70 str. Figure 12-2) to nie bardzo ma prawo działać to tak jak opisujesz. Pin wyjściowy to typowy przerzutnik bistabilny typu D. Instrukcja SBI PORTx,b powoduje wygenerowanie strobu WRx, który podany jest na wejście zegarowe T przerzutnika w momencie gdy multiplekser podaje na wejście danych D stan bitu z magistrali systemowej. W przypadku instrukcji SBI PINx,b różnica jest taka, że generowany jest strob WPx, który przełącza multuplekser podając na wejście D zanegowaną wartość wyjścia Q i generuje zbocze na wejście zegarowe T przerzutnika. Nie widzę tu nic coby mogło przełączyć ponownie ten przerzutnik bez generowania strobów WRx lub WPx. Musiałyby się pojawiać conajmniej dwa następujące po sobie sygnały strobujące przerzutnik.
Pozdrawiam Grzegorz
Chyba masz racje. No coz stawiam wiec dwa piwa :)
Użytkownik T.M.F. napisał:
Miło sie z Kolegą dyskutowało i jeśli byłby Kolega w pobliżu Słupska to zapraszam :-)
Pozdrawiam Grzegorz
GG: 1445218
Have something to add? Share your thoughts — no account required.
Ask the community — no account required