Witam. Dopiero zaczynam przygodę z programowaniem w C. Napisałem program, którego zadaniem jest miganie diodą podłączoną do pinu nr 1 portu D. po wgraniu programu, dioda ta świeci. Natomiast dioda podłączona do pinu 0 portu B miga w tym czasie lecz bardzo słabo. Kompletnie nie rozumiem tego..może mi ktoś pomóc W załączniku kod programu. Dodam ze wszystko robię na podstawce do programowania która ma odpowiednie podłączenie.
Witaj, ja też dopiero zaczynam #define F_CPU 8000000L
#include <avr/io.h>
#include <util/delay.h>
#define LED1 PD0 // tutaj definiujesz ze led ma być na PD0 ale to info dla ciebie dla kompilatora wygląda to tak LED1 = PD0=0
void main(void)
{
DDRD |= (1<<LED1); /* tu definiujesz kierunek pinu PD0 jako wyjście (robisz or wartości rejestru DDRD z jedynką przesunięta o 0 miejsc, bo LED1=PD0=0 czyli 00000001) */
PORTD |= (1<<LED1); /* tu przypisujesz 1 na PD0 dlatego dioda świeci (względem masy wybrałeś taką logikę) ale uwaga! tutaj tez traktuj LED1 jako wartość 0 przesuwasz jedynkę o zero miejsc czyli masz 00000001 robisz or z wartością PORTD czyli ustawiasz linię PD0 na 1 */
while (1) //Pętla główna
{
PORTB ^=(1<<LED1); /* tu zrobiłeś błąd zamiast portuD użyłes portuB ale zauważ ze dioda miga na na PB0 bo uwaga! LED1 traktujesz jako wartość 0 i stworzyłeś maskę przesuwając jedynkę o LED1 miejsc czyli o 0. Maska wynosi 00000001 robisz z nią xor z PORTB czyli w każdym obiegu pętli zmieniasz wartość PB0 na przeciwną.*/
_delay_ms(100); /*dioda miga słabo bo 100ms to bardzo krótki czas daj np 500ms * i słabo, bo nie ustawiłeś linii portu PB0 jako wyjście instrukcją DDRB |= (1<<PB0) - ale to taka dygresja ,bo zadaniem przecież jest miganie diodą na linii 0 portuB */
}
}
Zainteresuj się tez plikami nagłówkowymi tam się dzieje mnóstwo ciekawych rzeczy Pozdrawiam Michał
Generalnie kolega michas powiedział chyba wszystko, co trzeba było powiedzieć co do samego kodu i kilku zawartych w nim błędów, a ode mnie jeszcze pytanie - czy zadbałeś o filtrację zasilania Twojego uC? Jest to wbrew pozorom bardzo ważny temat jeśli chcesz, żeby nawet takie proste miganie LEDem działało prawidłowo.
Najważniejsze, czy wejścia są podciągnięte do plusa, bo jeśli nie to takie rzeczy się dzieją.
Nie widzę schematu a kodu nie analizuję bo nie znam i nie chcę znać "C"
MCU teoretycznie powinien wyzerować pamięć ale zdażają się nieraz "dziwne zachowania" więc warto przypisać/wyzerować wartość zamiast używać ORa zwłaszcza jeśli przed main() uruchamia się jakiś bootloader (np. arduino):
Code: c
Log in, to see the code
koczis_ws wrote:
Najważniejsze, czy wejścia są podciągnięte do plusa, bo jeśli nie to takie rzeczy się dzieją. kodu nie analizuję bo nie znam i nie chcę znać "C"
Akurat tutaj ... takie rzeczy się dzieją jak się nie zna "C"
Dzieki Panowie ! wszystko już gra. A co do filtrowania zasilania...wszystko dzieje się na podstawce programatora która ma odpowiednie filtrowanie napięcia. Temat do zamknięcia.