cybermech Napisano Październik 30, 2015 Udostępnij Napisano Październik 30, 2015 Witam, niedawno kupiłem płytkę Microboard M328(Atmega328-P) i postanowiłem wgrać najprostszy program z książki Mirosława Kardasia-migająca dioda led (musiałem zmienić PC7 na PC5). Diodę podłączyłem w następujący sposób: PC5-katoda-anoda-rezystor-5v. Problem w tym, że dioda świeci zamiast migać. (Korzystam z USBASP, ECLIPSE, zasilanie z programatora) Gdzie może być błąd? Jak sprawdzić czy płytka jest dobra? Z góry dzięki za pomoc. */ #include <avr/io.h> #include <util/delay.h> // definicje dla preprocesora #define LED_PIN (1<<PC5) // definicja pinu do którego podłączona jest dioda #define LED_ON PORTC &= ~LED_PIN // makrodefinicja – załączenie diody #define LED_OFF PORTC |= LED_PIN // makrodefinicja – wyłączenie diody #define LED_TOG PORTC ^= LED_PIN // makrodefinicja – zmiana stanu diody // ********************************************************* 1-sza wersja int main(void) { // ****** inicjalizacja ********* DDRC |= LED_PIN; // kierunek pinu PC5 – wyjściowy // ****** pętla główna programu ********* while(1) { LED_ON; // zapal diodę _delay_ms(1000); // oczekiwanie 1s (1000ms) LED_OFF; // zgaś diodę _delay_ms(1000); // oczekiwanie 1s } } Cytuj Link do komentarza Share on other sites More sharing options...
marek1707 Październik 30, 2015 Udostępnij Październik 30, 2015 Przede wszystkim napisz jak podłączyłeś tę diodę naprawdę. Bo jeśli jest tak jak mówisz (anoda do portu, katoda przez opornik do plusa), to nie powinna świecić w ogóle. Płytka ma na pokładzie stabilizator +5V i z tego co widzę na schemacie nie powinna być zasilana z zewnętrznych 5V podawanych np. na pin. 2 programatora. Jest to raczej wyjście do wykorzystania przez inne układy - proste stabilizatory nie lubią zasilania "od tyłu". Tak więc najbezpieczniej byłoby zasilać ją z 7-12V podanych na pin VIN (to piszą w Botlandzie na stronie produktu, nie wspominając o opcji czystych 5V) a programator zezworkować tak, by nie zasilał programowanego procesora, może natomiast swobodnie z otrzymanych 5V korzystać - jeśli potrzebuje. Czy symbol PC5 ma na pewno wartość 5 a nie np. 0b00100000? Cytuj Link do komentarza Share on other sites More sharing options...
cybermech Październik 30, 2015 Autor tematu Udostępnij Październik 30, 2015 Przepraszam mój błąd, podłączone oczywiście tak jak piszesz, czyli PC5-katoda-anoda-rezystor-5v (przełączenia na VIN nic nie zmienia). Co do wartości PC5 to tak jest podpisany na schemacie i płytce. Cytuj Link do komentarza Share on other sites More sharing options...
marek1707 Październik 30, 2015 Udostępnij Październik 30, 2015 Co chcesz przełączać na VIN bo nie bardzo rozumiem? Czyżby diodkę? Nigdy więcej nie rób takich rzeczy bezmyślnie zanim nie pomyślisz lub nie popytasz kolegów. Gdyby Twoja płytka była zasilana prawidłowo jak nakazuje producent (tj. np. z 12V podanych na VIN) to po przełączaniu anody diody LED na VIN prawdopodobnie miałbyś już spalony pin procesora. Czy mógłbyś się odnieść do tego co napisałem o obecności stabilizatora i poprawnym zasilaniu tej płytki? Nie obchodzą mnie napisy na płytce. PC5 jest użytym przez Ciebie symbolem w programie. Musi mieć wartość 5 żeby symbol LED_PIN miał wartość 0x20 i był prawidłową maską dla operacji na rejestrach portów. Czy tak jest? Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
cybermech Październik 30, 2015 Autor tematu Udostępnij Październik 30, 2015 Obecnie zasilam płytkę poprzez programator, spróbuję zasilić ją z zewnętrznego źródła (podam je na złącze kanda). Jak sprawdzić czy PC5 ma wartość 5? edit. zmiana zasilania niestety nie pomogła. Cytuj Link do komentarza Share on other sites More sharing options...
marek1707 Październik 30, 2015 Udostępnij Październik 30, 2015 Acha, czyli niczego nie zrozumiałeś. Przecież pisałem Ci, że zasilanie tej płytki ze złącza programatora nie jest dobrym pomysłem. Masz jakieś kłopoty z czytaniem? Z czego zasilasz swój układ teraz? Jakim napięciem? Masz jakiś miernik? Mierzyłeś napięcie na pinach Vcc procesora? Przestań pleść o taktowaniu, zacznij od podstaw albo najlepiej odłóż tę płyteczkę na półkę (bo za chwilę będzie nadawała się do kosza) i na spokojnie przemyśl to co robisz. Cytuj Link do komentarza Share on other sites More sharing options...
cybermech Październik 30, 2015 Autor tematu Udostępnij Październik 30, 2015 Zasilam napięciem 6,6v z zasilacza laboratoryjnego. Mam miernik (na wyjściu 5v jest 4,97 więc chyba dobrze. Rozumiem, że mam sprawdzić zasilanie samej Atmegi. Cytuj Link do komentarza Share on other sites More sharing options...
marek1707 Październik 31, 2015 Udostępnij Październik 31, 2015 Nie, jeśli na pinie 5V jest 5V to OK - nie musisz upewniać się, że ścieżki na płytce są dobre. Nie możesz płytki zasilać z programatora - czy zmieniłeś zworki (lub cokolwiek co tam masz) na nim? Tym bardziej nie możesz zasilać jej z dwóch źródeł na raz: programatora i zasilacza podłączonego do VIN. Po tym jak płytka NIE jest zasilana z programatora, możesz podłączyć zasilacz wyłącznie do VIN. Rekomendowane napięcie to 7-12V. Stabilizator 78M05 musi mieć margines min. 2V żeby poprawie zrobić 5V. Gdy powyższe warunki będą spełnione i upewnisz się raz jeszcze, że na pinach 5V jest rzeczywiście 5V±0.1V, zmień dla pewności linię w kodzie na: #define LED_PIN 0x20 Czy Twój programator poprawnie zapisuje kod do pamięci programu? Czy masz włączoną weryfikację? Czy dostajesz potwierdzenie prawidłowego zapisu? Po programowaniu/resecie procesora wszystkie porty są domyślnie wejściami i gdyby procesor był np. niezaprogramowany, diodka nie powinna świecić. Zrób taką próbę: skasuj FLASH bez wgrywania jakiegokolwiek kodu. Jeśli diodka będzie świecić, masz problem z montażem (zwarcie?) lub uszkodzony pin procesora. Cytuj Link do komentarza Share on other sites More sharing options...
cybermech Październik 31, 2015 Autor tematu Udostępnij Październik 31, 2015 Chyba ten pin jest uszkodzony. Zmiana w kodzie nie pomogła (dioda miga z dużą częstotliwością niezależnie od zmian w kodzie). Programator używałem wcześniej więc raczej jest dobry. Po zakończeniu zapisu otrzymuję powiadomienie. Cytuj Link do komentarza Share on other sites More sharing options...
Elvis Październik 31, 2015 Udostępnij Październik 31, 2015 Napisałeś, że używasz Eclipse - jakiego używasz kompilatora? Jakie masz ustawienia projektu? Cytuj Link do komentarza Share on other sites More sharing options...
cybermech Październik 31, 2015 Autor tematu Udostępnij Październik 31, 2015 Kompilator-AVR GCC, ustawiłem programator USBASP, Atmege 328P i taktowanie 16000000. Nie ustawiałem fusbitów. Cytuj Link do komentarza Share on other sites More sharing options...
Elvis Październik 31, 2015 Udostępnij Październik 31, 2015 Ja jakoś nadal nie mam zaufania do ustawień kompilatora. Próbowałeś napisać program bez _delay_ms? Zamiast tego wstawić pętle opóźniające na zwykłym for(). Cytuj Link do komentarza Share on other sites More sharing options...
marek1707 Październik 31, 2015 Udostępnij Październik 31, 2015 Jeśli IDE masz ustawione 16MHz to wszelkie niezgodności z rzeczywistym taktowaniem procesora skutkowałyby tylko wolniejszym niż zakładany 1Hz mruganiem, bo ATmega i tak szybciej nie umie a domyślnie przychodzi od ATMELa z ustawieniem 1MHz. Wtedy mrugałoby raz na 16 sekund. Prawdopodobnie jednak producent płytki ustawił taktowanie na zewnętrzny kwarc 12MHz choć jest też 50% szans, że dostarcza płyteczki z "gołym" procesorem, czyli taktowanym z wewnętrznego generatora 1MHz i żeby odpalić kwarc trzeba przestawić fuse bity. Właściwie ich sprawdzenie powinno być pierwszą czynnością po podłączeniu do programatora. Dziwię Ci się, że tego nie zrobiłeś i że nawet nie zmieniłeś ustawień środowiska IDE na 1 lub 12MHz - bo raczej tylko te dwie opcje wchodzą w grę. W każdym razie mruganie diodki świadczy o tym, że pin jest raczej dobry. Moim zdaniem pachnie mi to wciąż problemami z zasilaniem, np. jest tak słabe, że procesor rusza ale zapalenie diodki (jaki masz opornik?) powoduje zapaść poniżej 4.5V i RESET procesora, ponowny restart, zapalenie diodki itd... To jak w końcu masz teraz to zasilanie zrobione, ale już tak dokładnie? Cytuj Link do komentarza Share on other sites More sharing options...
cybermech Październik 31, 2015 Autor tematu Udostępnij Październik 31, 2015 Podaję 7V z regulowanego zasilacza na pin VIN, opornik do diody ma około 450 Ohm. P.S Nie wiem jak dokładniej opisać zasilanie. Może wstawić zdjęcie wszystkich połączeń? Cytuj Link do komentarza Share on other sites More sharing options...
marek1707 Październik 31, 2015 Udostępnij Październik 31, 2015 No dobrze, rozumiem, że zasilanie z programatora jest już odpięte. A jak wyszedł test pustego procesora? Czy po skasowaniu pamięci FLASH diodka nadal świeci lub mruga? Zdjęcie całości mile widziane. Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!