Imperatorek Napisano Czerwiec 16, 2019 Udostępnij Napisano Czerwiec 16, 2019 (edytowany) Cześć wszystkim. Mam problem z rezonatorem kwarcowym na płytce stykowej -- w momencie podpięcia go przez kondensatory 22 pF do masy, urządzenie nie jest rozpoznawane i avrdude wyświetla mi błąd (Mega1284). Jak tylko odłączę go od masy to urządzenie da się normalnie zaprogramować choć nie jestem pewien czy wszystko działa, ponieważ nie mogę przeprowadzić poprawnej transmisji UART (błędy w ramce danych, program jest dobry bo przez chwilę działał na ATMedze328p -- sprawdzane analizatorem logicznym.) Nie zamieszczam schematu podłączenia, ponieważ jest dobre -- na płytce lutowanej w której pracował mikrokontroler wszystko działa przy takim samym podłączeniu (kwarc połączony z masą). Zastanawia mnie też czy problemem może być sam kwarc. Zawsze używałem takich z oznaczeniem np. 16.000 itp. natomiast ten którego używam obecnie ma oznaczenie R160LEB8w Z góry dzięki za odpowiedzi. PS: Odpowiedź avrdude przy poprawnej transmisji. avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.01s avrdude: Device signature = 0x1e9706 (probably m1284) avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed To disable this feature, specify the -D option. avrdude: erasing chip avrdude: reading input file "asdf1.hex" avrdude: writing flash (184 bytes): Writing | ################################################## | 100% 0.08s avrdude: 184 bytes of flash written avrdude: verifying flash memory against asdf1.hex: avrdude: load data flash data from input file asdf1.hex: avrdude: input file asdf1.hex contains 184 bytes avrdude: reading on-chip flash data: Reading | ################################################## | 100% 0.08s avrdude: verifying ... avrdude: 184 bytes of flash verified avrdude: safemode: Fuses OK (E:FF, H:99, L:F7) avrdude done. Thank you. Kod programu: /*Przek dompilacją należy zdefinować wartości BAUD Rate */ #include <avr/io.h> #define BAUD 9600 #define MYUBRR F_CPU/16/BAUD-1 void UART_Init( unsigned int ubrr); void UART_Transmit(unsigned char data); int main(void) { char i = '5'; UART_Init(MYUBRR); UART_Transmit(i); while(1) ; return 0; } void UART_Init( unsigned int ubrr) { /*Set baud rate */ UBRR0H = (unsigned char)(ubrr>>8); UBRR0L = (unsigned char)ubrr; /*Enable receiver and transmitter */ UCSR0B = (1<<RXEN0)|(1<<TXEN0); /* Set frame format: 8data, 2stop bit */ UCSR0C = (1<<USBS0)|(3<<UCSZ00); } void UART_Transmit( unsigned char data ) { /* Wait for empty transmit buffer */ while ( !( UCSR0A & (1<<UDRE0)) ) ; /* Put data into buffer, sends the data */ UDR0 = data; } Wynik z analizatora stanów -- BAUD ustawiony na 9600 tak jak w programie: Edytowano Czerwiec 16, 2019 przez Imperatorek
deshipu Czerwiec 16, 2019 Udostępnij Czerwiec 16, 2019 A powiedz jakiej długości są w sumie przewody od mikrokontrolera do tego kwarcu, od kwarcu do kondensatorów i od kondensatorów do masy? I jaki twoim zdaniem może być ich efekt?
Imperatorek Czerwiec 17, 2019 Autor tematu Udostępnij Czerwiec 17, 2019 A więc tak -- kwarc jest wsadzony zaraz obok nóżek mikrokontrolera, zaraz za tym (następne oczko płytki) kondensatory a te bezpośrednio do linii masy na płytce stykowej. Zbyt długie przewody powodują niepoprawną pracę mikrokontrolera, ale czy moje podpięcie już wykracza poza bezpieczne granice?
deshipu Czerwiec 17, 2019 Udostępnij Czerwiec 17, 2019 Trudno mi powiedzieć, ale 22pF pojemności to naprawdę nie jest dużo. Piszesz, że na płytce działa, więc strzelałbym w długość przewodów albo kiepskie połączenia. Tylko to jest takie zgadywanie, równie dobrze może to być jednak błąd w schemacie (bardzo często błędy są tam, gdzie uważamy, że na pewno jest dobrze), połączeniach, fuse-ach, zasilaniu, etc. — najlepiej wszystko cierpliwie po kolei sprawdzić, eliminując poszczególne możliwości.
Imperatorek Czerwiec 17, 2019 Autor tematu Udostępnij Czerwiec 17, 2019 Na pewno wszystko będę jeszcze dokładnie sprawdzał Co do kondensatorów to jakie wartości powinienem dobrać zamiast obecnych (tak orientacyjnie)? 22 pF zaleca nota katalogowa mikrokontrolera i tym się kierowałem przy ich doborze.
deshipu Czerwiec 17, 2019 Udostępnij Czerwiec 17, 2019 22pF to dobra wartość, ale weź pod uwagę, że przy takich małych wartościach znaczenie zaczynają mieć wszystkie rzeczy w pobliżu — nawet długie nóżki kondensatora. Plus, indukcyjność też wpływa na przesunięcie sygnału w fazie. Tak więc i kwarc i kondensatory tak blisko mikrokontrolera jak tylko się da. 1
kaczakat Czerwiec 17, 2019 Udostępnij Czerwiec 17, 2019 22pF to wartość maksymalna, zajrzyj jeszcze raz do noty katalogowej, tam jest coś-22pF. Jak doliczysz pojemność z blaszek w stykówce to może się okazać, że właśnie dlatego bez tych 22pF działa lepiej.
Imperatorek Czerwiec 17, 2019 Autor tematu Udostępnij Czerwiec 17, 2019 9 minut temu, kaczakat napisał: 22pF to wartość maksymalna, zajrzyj jeszcze raz do noty katalogowej, tam jest coś-22pF. Jak doliczysz pojemność z blaszek w stykówce to może się okazać, że właśnie dlatego bez tych 22pF działa lepiej. Masz rację, nota przewiduje kondensator z zakresu 12-22 pF. Niestety nie mam pod ręką nic z tego przedziału oprócz wspomnianych 22 pF wiec na chwilę obecną nie mogę tego sprawdzić.
kaczakat Czerwiec 17, 2019 Udostępnij Czerwiec 17, 2019 Dopóki masz go na stykówce po prostu zostaw sam kwarc i wywal kondensatory, jak procesor rusza to znaczy że problemu szukać trzeba gdzie indziej. Mam nawet taki układ polutowany na płytce uniwersalnej i działa bez problemu na samym kwarcu, testowałem od 1-20 (i 32) MHz, UART po kabelkach i BT, również niekorzystne baudrate jak 115200 -500000 i wszystko działa OK. Pewnie z kwarcem 12pF byłoby lepiej, ale właśnie też takiego nie miałem. 1
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »