Skocz do zawartości
cybermech

Microboard M328-pierwszy program

Pomocna odpowiedź

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
}
}

Udostępnij ten post


Link to post
Share on other sites

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?

Udostępnij ten post


Link to post
Share on other sites

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.

Udostępnij ten post


Link to post
Share on other sites

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?

Udostępnij ten post


Link to post
Share on other sites

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.

Udostępnij ten post


Link to post
Share on other sites

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.

Udostępnij ten post


Link to post
Share on other sites

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.

Udostępnij ten post


Link to post
Share on other sites

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.

Udostępnij ten post


Link to post
Share on other sites

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.

Udostępnij ten post


Link to post
Share on other sites

Napisałeś, że używasz Eclipse - jakiego używasz kompilatora? Jakie masz ustawienia projektu?

Udostępnij ten post


Link to post
Share on other sites

Kompilator-AVR GCC, ustawiłem programator USBASP, Atmege 328P i taktowanie 16000000. Nie ustawiałem fusbitów.

Udostępnij ten post


Link to post
Share on other sites

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().

Udostępnij ten post


Link to post
Share on other sites

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?

Udostępnij ten post


Link to post
Share on other sites

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ń?

Udostępnij ten post


Link to post
Share on other sites

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.

Udostępnij ten post


Link to post
Share on other sites

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!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...