Skocz do zawartości

dondu

Użytkownicy
  • Zawartość

    983
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    8

dondu wygrał w ostatnim dniu 20 grudnia 2011

dondu ma najbardziej lubianą zawartość!

Reputacja

77 Bardzo dobra

O dondu

  • Ranga
    7/10
  • Urodziny 01.01.1967

Informacje

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

  1. O, faktycznie, nie zauważyłem - swoją drogą załączyłeś niezgodnie z zasadami zamieszczania zdjęć na forum Ja załączyłem link do dokumentu Atmela, który przy okazji warto w całości poczytać.
  2. Tak użyj 6-io pinowego, ale zgodnie ze standardem str 6: Atmel AVR042: AVR Hardware Design Considerations
  3. Oj, raczej podpowiedzi Oto pierwsze z nich: 1. C5, C6, C8 - pomyliłeś jednostki uF z nF. 2. Rozmieszczenie pinów w gnieździe programatora masz niezgodne ze standardem. 3. nie podajesz wartości wszystkich elementów więc nie można sprawdzić np. R6-R9.
  4. To dobrze , ponieważ naniesiesz uwagi, które podał przedmówca dot 7805, z małą poprawka dot. kondensatora na AREF, którego nie musisz dodawać, jeżeli nie używasz ADC, a tak chyba jest? 1. PCB - kwarc i jego kondensatory odwrotnie na PCB - kwarc bliżej uC a kondensatory z drugiej strony, ale TXD poprowadź jak najdalej od kwarcu u jego kondensatorów. Niestety tutaj musi być kompromis, więc jeżeli nie dasz rady, zmienić położenia kwarcu, to chociaż ścieżkę i przelotkę TXD odsuń od kwarcu i jego kondensatorów. 2. SCHEMAT + PCB: C1, C3 i C6 mają nieodpowiednie wartości. Powinny mieć 100nF i być jak najbliżej pinów zasilających uC (osobno dodaj te przy 7805 jak napisał przedmówca). 3. Dodaj kondensatory filrujące zasilanie pozostałych układów scalonych i podobnie jak z 7805 zrób regulator na 3,3V. Do tych punktów przeczytaj odpowiednie fragmenty, w tym artykule: Dla początkujących - Zakłócenia w pracy mikrokontrolerów - poradnik praktyczny dla robotyków. I uwaga istotna z punktu widzenia Twojej rutyny oraz zagapienia się tych którzy z Twojego schematu skorzystają w przyszłości. Nigdy nie definiuj tak gniazda ISP jakie masz na tym schemacie. To pierwszy stopień do pomyłek, gdy gniazdo jest narysowane prawie tak jak wygląda w rzeczywistości, ale ma przestawione piny. Kiedyś na innym forum właśnie taki przypadek widziałem i ktoś kupę czasu stracił, zanim zorientował się, że ma źle podłączone sygnały programatora. Ty masz je podłączone prawidłowo, chodzi mi tylko o rutynę.
  5. Wysłałeś już? Jeżeli nie, to pokaż aktualny schemat i dodaj PCB.
  6. Aż w końcu na zawodach zgodnie z prawem Murphy'ego nastąpi ten pierwszy raz. Może więc przeczytaj to co wskazałem, by wiedzę nabyć ... od Atmela, nie ode mnie. Wywal je.
  7. To przeczytaj punkt w linku, który Ci podałem, a konkretnie podpunkt dot. pinu RESET. Czy zaszkodzą? Pewnie nie, ale na pewno nic nie dadzą. EDIT: Nie tylko Piotrze. Autor zwiera naładowany kondensator do masy, a to grozi uszkodzeniem mikrokontrolera, co opisałem w w/w punkcie.
  8. Tak na szybko: 1, LEDy bez rezystorów? Coś się usmaży ... 2. jeżeli kondensator na resecie, to poczytaj punkt III.2 tutaj . 3. XTAL'e - coś nie teges. Co tam kombinujesz?
  9. Twój problem z enkoderami nie musi wynikać z długości pracy Twojej funkcji ich obsługi, tylko z blokowania dostępu do tej funkcji przez inne funkcje obsługi przerwań. Innymi słowy przy 20MHz zegarze 500tików/s to żadne obciążenie dla uC. Ale jeżeli inna funkcja przyblokuje przerwania na dłużej, to możliwe jest pominięcie któregoś impulsu enkodera, ponieważ flaga przerwania PCINT2 zostanie nadpisana pomimo, że poprzednie przerwanie jeszcze nie zostało obsłużone. Zastanów się nad całym programem pod tym kątem. EDIT: Generalnie globalne przerwania są wyłączane sprzętowo w momencie rozpoczęcia obsługi przerwania i odblokowywane w momencie wyjścia z funkcji assemblerowym rozkazem reti który jest przez kompilator dodawany na końcu funkcji. Dlatego funkcja obsługi przerwania zadeklarowana przez baton'a w taki sposób: ISR(PCINT2_vect) // aktualna wartość enkoderów w globalnych int enkoderL, enkoderP { ... } nie wymaga blokowania przerwań na jej początku, ani uruchamiania ich na końcu. Jeżeli natomiast chcemy by funkcję mogło przerwać inne przerwanie należy dodać do kodu na samym początku sei(): ISR(PCINT2_vect) // aktualna wartość enkoderów w globalnych int enkoderL, enkoderP { sei(); ... } lub użyć atrybutu ISR_NOBLOCK: ISR(PCINT2_vect, ISR_NOBLOCK) // aktualna wartość enkoderów w globalnych int enkoderL, enkoderP { ... } który zrobi dokładnie to samo co powyżej, czyli doda sei() na początku funkcji.
  10. No to zapoznaj się z tym artykułem: Dla początkujących - Zakłócenia w pracy mikrokontrolerów - poradnik praktyczny dla robotyków.
  11. Fajnie by było gdybyś pokazał schemat. Nie przejmuj się komentarzami - sumo to sumo, tak jak samochód to samochód niezależnie czy syrena, czy Porsche
  12. OK, nie popatrzyłem. W takim razie nie pomogę bo BASCOM mnie nie lubi:) Jeżeli zapełniłeś cały flash Atmega8 i optymalizacje masz włączoną prawidłowo, to czas na zmianę języka na C.
  13. Jaką optymalizację masz włączoną?
  14. Po pierwsze wklejaj schematy w formie graficznej - nie każdy ma Eagle pod ręką, przez co dłużej czekasz na podpowiedzi. Masz zamieniony MOSI z MISO: Zobacz jak są wyprowadzone piny w programatorze: http://mikrokontrolery.blogspot.com/2011/04/plytka-stykowa-zasady.html Poczytaj także ten artykuł: Dla początkujących - Zakłócenia w pracy mikrokontrolerów - poradnik praktyczny dla robotyków. i popraw swój schemat.
×
×
  • Utwórz nowe...