Thor_
21.09.2013, 21:29
Hallo zusammen
Nach laaanger Zeit habe ich mich mal wieder an die Programmierung eines Mc gewagt. Dieses Mal soll es sauberer und ernsthafter sein.
Ausserdem will ich mich an C wagen und nicht mehr mit Bascom programmieren.
Als erster Test habe ich einen Atmega8, eine LED und einen Taster. Das Ziel ist es, die LED per Taster einzuschalten (klar).
Ich lasse am besten den kommentierten Code für sich sprechen:
#include <avr/io.h>
#define F_CPU 1000000UL //1 Mhz
#include <util/delay.h>
int main(void){
DDRD = 0x00;
DDRC=0xFF;
PORTD=0xFF;
PORTC=0xFF; //funktionskontrolle
_delay_ms(1000);
PORTC=0x00;
while(1){
// if(PIND==0b01111111){PORTC=0xFF;} funktioniert
// if(PIND==0b11111111){PORTC=0x00;} funktioniert
if((PIND & (1<<PD7))==1){PORTC=0x00;} //funktioniert nicht
if((PIND & (1<<PD7))==0){PORTC=0xFF;} //funktioniert
}
}
Das Problem ist nun, dass sobald ich Strom gebe, leuchtet die ED noch nicht (ausgenommen vom ersten, kurzen ein/ausschalten).
Wenn ich den Taster aber drücke, so leuchtet sie und hört nicht mehr auf, was sie doch aber eigentlich sollte.
Hier noch meine Überlegungen zu der Bitmaskierung
Zustand Pins PortD wenn Taster NICHT gedrückt
1111'1111 (Zustand der Pins)
1000'0000 (OR-Verknüpfung mit 1 ergibt 1 wenn Taster nicht gedrückt)
Zustand Taster gedrückt
0111'1111
1000'0000 (OR-Verknüpfung mit 1 ergibt 0)
Der Taster usw. ist garantiert richtig angeschlossen, denn so:
if(PIND==0b01111111){PORTC=0xFF;}
if(PIND==0b11111111){PORTC=0x00;}
funktioniert es problemlos, es muss also die Programmierung sein.
Ich hoffe, dass ich mein Problem klar machen konnte, und das ihr mir helfen mögt.
Liebe Grüsse
Thor_
Nach laaanger Zeit habe ich mich mal wieder an die Programmierung eines Mc gewagt. Dieses Mal soll es sauberer und ernsthafter sein.
Ausserdem will ich mich an C wagen und nicht mehr mit Bascom programmieren.
Als erster Test habe ich einen Atmega8, eine LED und einen Taster. Das Ziel ist es, die LED per Taster einzuschalten (klar).
Ich lasse am besten den kommentierten Code für sich sprechen:
#include <avr/io.h>
#define F_CPU 1000000UL //1 Mhz
#include <util/delay.h>
int main(void){
DDRD = 0x00;
DDRC=0xFF;
PORTD=0xFF;
PORTC=0xFF; //funktionskontrolle
_delay_ms(1000);
PORTC=0x00;
while(1){
// if(PIND==0b01111111){PORTC=0xFF;} funktioniert
// if(PIND==0b11111111){PORTC=0x00;} funktioniert
if((PIND & (1<<PD7))==1){PORTC=0x00;} //funktioniert nicht
if((PIND & (1<<PD7))==0){PORTC=0xFF;} //funktioniert
}
}
Das Problem ist nun, dass sobald ich Strom gebe, leuchtet die ED noch nicht (ausgenommen vom ersten, kurzen ein/ausschalten).
Wenn ich den Taster aber drücke, so leuchtet sie und hört nicht mehr auf, was sie doch aber eigentlich sollte.
Hier noch meine Überlegungen zu der Bitmaskierung
Zustand Pins PortD wenn Taster NICHT gedrückt
1111'1111 (Zustand der Pins)
1000'0000 (OR-Verknüpfung mit 1 ergibt 1 wenn Taster nicht gedrückt)
Zustand Taster gedrückt
0111'1111
1000'0000 (OR-Verknüpfung mit 1 ergibt 0)
Der Taster usw. ist garantiert richtig angeschlossen, denn so:
if(PIND==0b01111111){PORTC=0xFF;}
if(PIND==0b11111111){PORTC=0x00;}
funktioniert es problemlos, es muss also die Programmierung sein.
Ich hoffe, dass ich mein Problem klar machen konnte, und das ihr mir helfen mögt.
Liebe Grüsse
Thor_