Witam!
Właśnie przesiadam się z 8051 (Bascom) na ATMegę8 i C. Zacząłem od prostego programu pod układ z rysunku (pominąłem czwarty wyświetlacz, sterowany z PC3):
Oczywiście jest to tylko schemat uproszczony, obrazujący jedynie sposób sterowania wyświetlacza, proszę nie patrzeć na brak innych elementów.
Kod programu:
Program ma za zadanie tylko wyświetlać na wyświetlaczach liczbę 123 i nic więcej. Problem polega na tym, że ostatnia cyfra świeci wyraźnie jaśniej od pozostałych i za nic nie mogę dojść dlaczego.
Zauważyłem coś ciekawego w symulacji (AVR Studio), mianowicie przy uaktywnianiu wyświetlaczy 1 i 2 (PC0 i PC1) dane wpisywane do PORTC pojawiają się najpierw w PORTC, później w PINC, natomiast przy ostatnim wyświetlaczu dane pojawiają się jednocześnie w obu rejestrach. Właśnie tu znajduje się przyczyna problemu, tylko nie wiem jak sobie z tym poradzić. Dlaczego tak się dzieje? Jeśli dodam do kodu linie oznaczone komentarzem, wszystkie wyświetlacze świecą jednakowo.
Nie ma też znaczenia liczba używanych wyświetlaczy - zawsze ostatni świeci 2x jaśniej od pozostałych.
Jeśli coś zagmatwałem lub pominąłem w opisie, proszę pytać.
Pozdrawiam.
Właśnie przesiadam się z 8051 (Bascom) na ATMegę8 i C. Zacząłem od prostego programu pod układ z rysunku (pominąłem czwarty wyświetlacz, sterowany z PC3):
Oczywiście jest to tylko schemat uproszczony, obrazujący jedynie sposób sterowania wyświetlacza, proszę nie patrzeć na brak innych elementów.
Kod programu:
#include <avr\io.h>
int main(void)
{
DDRC = 1<<0 | 1<<1 | 1<<2;
DDRD = 255;
while (1<5)
{
PORTC = 0; //wygaszanie
PORTD = ~(1<<1 | 1<<2); //wpisanie cyfry "1"
PORTC = 1<<0; //zapalenie pierwszego wyświetlacza
// PORTC = 1<<0;
PORTC = 0; //wygaszanie
PORTD = ~(1<<0 | 1<<1 | 1<<3 | 1<<4 | 1<<6); //wpisanie cyfry "2"
PORTC = 1<<1; //zapalenie drugiego wyświetlacza
// PORTC = 1<<1;
PORTC = 0; //wygaszenie
PORTD = ~(1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<6); //wpisanie cyfry "3"
PORTC = 1<<2; /zapalenie trzeciego wyświetlacza
}
return 0;
}
Program ma za zadanie tylko wyświetlać na wyświetlaczach liczbę 123 i nic więcej. Problem polega na tym, że ostatnia cyfra świeci wyraźnie jaśniej od pozostałych i za nic nie mogę dojść dlaczego.
Zauważyłem coś ciekawego w symulacji (AVR Studio), mianowicie przy uaktywnianiu wyświetlaczy 1 i 2 (PC0 i PC1) dane wpisywane do PORTC pojawiają się najpierw w PORTC, później w PINC, natomiast przy ostatnim wyświetlaczu dane pojawiają się jednocześnie w obu rejestrach. Właśnie tu znajduje się przyczyna problemu, tylko nie wiem jak sobie z tym poradzić. Dlaczego tak się dzieje? Jeśli dodam do kodu linie oznaczone komentarzem, wszystkie wyświetlacze świecą jednakowo.
Nie ma też znaczenia liczba używanych wyświetlaczy - zawsze ostatni świeci 2x jaśniej od pozostałych.
Jeśli coś zagmatwałem lub pominąłem w opisie, proszę pytać.
Pozdrawiam.