Witam. Mam problem z podstawowa konfiguracja portów w Atmega8 (oraz Atmega88). Najpierw myślałem ze uC jest uszkodzony. Zamieniłem na Atmege88. Nadal tak samo się zachowuje.
Jak np na mam odczytać PINB5 i w zależności od jego stanu zmienić któryś bit PORTB na przeciwny to nie działa nic, ciągle widzi ze PINB5 ==1. Jak PINB5 ma sterować PORTD działa poprawnie. Cały PORTD to wyjście. PORTB0..4 wyjścia reszta to wejścia. Cały PORTC to wejścia. I np z wszystkie PINC które próbuję odczytać zachowują się jakby były cały czas podciągnięte do VCC. Już nie wiem gdzie szukać błędu w tak prostym kodzie. Tam nie ma nic co może wprowadzać zakłócenia. Dodam ze próbowałem napisać to pod AVRstudio i w symulatorze działa poprawnie. Kompilowałem także w CodeVision. Nie próbowałem jedynie w Bascomie z racji ze nie uruchomiło mi się to środowisko a w domu nie mam Internetu. Proszę o pomoc, ponieważ na Atmega88 chciałem zbudować coś dużo bardziej skomplikowanego i sprawdzić jej możliwości a jak na razie nie potrafię sterować portami. Przetwornik ADC działa poprawnie w obu kościach. Dzisiaj kupię jeszcze jedną kość dla sprawdzenia. FuseBity sa skonfigurowane na 8MHz internal RC. a tak to wszystkie se default'owe.
Dodam że to nie mój pierwszy program na uC. Do tej pory wykorzystywałem M16, M32, tiny2313 tiny15... Ale po raz pierwszy mam takie problemy... A bardzo zależy mi na rozgryzieniu tych m8 i m88 dlaczego zachowują się tak samo....
pozdrawiam
Jak np na mam odczytać PINB5 i w zależności od jego stanu zmienić któryś bit PORTB na przeciwny to nie działa nic, ciągle widzi ze PINB5 ==1. Jak PINB5 ma sterować PORTD działa poprawnie. Cały PORTD to wyjście. PORTB0..4 wyjścia reszta to wejścia. Cały PORTC to wejścia. I np z wszystkie PINC które próbuję odczytać zachowują się jakby były cały czas podciągnięte do VCC. Już nie wiem gdzie szukać błędu w tak prostym kodzie. Tam nie ma nic co może wprowadzać zakłócenia. Dodam ze próbowałem napisać to pod AVRstudio i w symulatorze działa poprawnie. Kompilowałem także w CodeVision. Nie próbowałem jedynie w Bascomie z racji ze nie uruchomiło mi się to środowisko a w domu nie mam Internetu. Proszę o pomoc, ponieważ na Atmega88 chciałem zbudować coś dużo bardziej skomplikowanego i sprawdzić jej możliwości a jak na razie nie potrafię sterować portami. Przetwornik ADC działa poprawnie w obu kościach. Dzisiaj kupię jeszcze jedną kość dla sprawdzenia. FuseBity sa skonfigurowane na 8MHz internal RC. a tak to wszystkie se default'owe.
#include <avr/io.h>
#define F_CPU 8000000
int main()
{
// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=T State6=T State5=P State4=0 State3=0 State2=0 State1=0 State0=0
DDRB = 0b00011111;
PORTB =0b00100000;
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=P State4=P State3=P State2=T State1=T State0=T
DDRC = 0b00000000;
PORTC =0b11111000;
// Port D initialization
// Func7=In Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=T State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
DDRD = 0b01111111;
PORTD =0b10000000;
while (1)
{
//warunek majacy jedynie zmieniac bit w porcie wyjscowym
if (((PINC && 0b00100000)))
PORTD |= 0b00000001;
else
PORTD &=0b11111110;
/* tak samo nie dziala nic a nic taki kod
w symulatorze dziala poprawnie a w rzeczywistosci nie dziala.
if (((PINB && 0b00100000)))
PORTB |= 0b00000001;
else
PORTB &=0b11111110;
}
*/
}
Dodam że to nie mój pierwszy program na uC. Do tej pory wykorzystywałem M16, M32, tiny2313 tiny15... Ale po raz pierwszy mam takie problemy... A bardzo zależy mi na rozgryzieniu tych m8 i m88 dlaczego zachowują się tak samo....
pozdrawiam