Hallo
Fehlt hier nicht eine Klammer
Code:if ( ! PIND & 0x04) //Wenn PortD Bit2 0 hat
sollte doch so sein
GrußCode:if ( ! (PIND & 0x04)) //Wenn PortD Bit2 0 hat
Dieter
Ich habe grad folgendes kleines Programm geschrieben:
PS: Ich benutze Myavr-Board.
Ich kann drücken wie ich will, da leuchtet nichts... ?Code://Testprogramm zum testen der LEDs und Schalter //Der Schalter hängt an PortD Pin 2, die LEDs hängen an PortC #include <avr/io.h> #include <inttypes.h> #ifndef F_CPU #define F_CPU 3686400UL /* Quarz mit 3.6864 Mhz */ #endif #include <avr/delay.h> /* definiert _delay_ms() ab avr-libc Version 1.2.0 */ int main(void) { DDRC = 0xFF; // PortC Ausgänge DDRD = 0x00; // PortD Eingänge PORTD = 0xFF; //Pullups PortD aktiviert //Bit 2 an PORTD auswerten if ( ! PIND & 0x04) //Wenn PortD Bit2 0 hat { PORTC=0xFF; //Schalter gedrückt } else { PORTC=0x00; //Schalter nicht gedrückt } return 0; }
PS: Habe gerade mal an pin D.2 gemessen, passt alles. Unbetätigt liegen +5V an, betätige ich den Taster liegen 0V an.
Hallo
Fehlt hier nicht eine Klammer
Code:if ( ! PIND & 0x04) //Wenn PortD Bit2 0 hat
sollte doch so sein
GrußCode:if ( ! (PIND & 0x04)) //Wenn PortD Bit2 0 hat
Dieter
Hi Moonwalker,
ich denk mal dein Problem ist wenn du drückst ist dein Programm schon abgelaufen! Du müsstest theoretisch den Taster gedrückt halten während du resetest! Oder du baust deinen Abfrage und Ausgabe Block in ne Endlosschleife ein! Also statt:
soCode:int main(void) { DDRC = 0xFF; // PortC Ausgänge DDRD = 0x00; // PortD Eingänge PORTD = 0xFF; //Pullups PortD aktiviert //Bit 2 an PORTD auswerten if ( ! PIND & 0x04) //Wenn PortD Bit2 0 hat { PORTC=0xFF; //Schalter gedrückt } else { PORTC=0x00; //Schalter nicht gedrückt } return 0; }
wenn du die Endlosschleife hast wird der Taster die ganze Zeit abgefragt und nicht nur einmal ganz am Anfang!Code:int main(void) { DDRC = 0xFF; // PortC Ausgänge DDRD = 0x00; // PortD Eingänge PORTD = 0xFF; //Pullups PortD aktiviert //Bit 2 an PORTD auswerten for(;;) { if ( ! PIND & 0x04) //Wenn PortD Bit2 0 hat { PORTC=0xFF; //Schalter gedrückt } else { PORTC=0x00; //Schalter nicht gedrückt } } return 0; }
Gruß Michi
Achso
Es fehlt auch noch eine Endlosschleife, sonst ist das Programm so schnell zu Ende, das du keine Zeit hast, zu drücken
Code://Testprogramm zum testen der LEDs und Schalter //Der Schalter hängt an PortD Pin 2, die LEDs hängen an PortC #include <avr/io.h> #include <inttypes.h> #ifndef F_CPU #define F_CPU 3686400UL /* Quarz mit 3.6864 Mhz */ #endif #include <avr/delay.h> /* definiert _delay_ms() ab avr-libc Version 1.2.0 */ int main(void) { DDRC = 0xFF; // PortC Ausgänge DDRD = 0x00; // PortD Eingänge PORTD = 0xFF; //Pullups PortD aktiviert while(1) { //Bit 2 an PORTD auswerten if ( ! (PIND & 0x04)) //Wenn PortD Bit2 0 hat { PORTC=0xFF; //Schalter gedrückt } else { PORTC=0x00; //Schalter nicht gedrückt } } return 0; }
Stimmt Das ging wohl alles etwas schnell zu ende Danke für die schnellen Antworten, ihr habt mir sehr geholfen.
PS: Vielleicht hätt ich den Taster schon beim Programmieren drücken sollen *lach*
Eine kurze Frage: Es funktioniert jetzt, aber für was steht die 1 hinter deiner While-Endlos-Schleife:
while (1) ??!!.. wenn ich die 1 weg lasse bringt der compiler nen Fehler.
wäre auch gegangen while () , oder?
Hi Moonwalker,
du kannst auch als Endlosschleife die while einsetzen!
while(1) bedeutet das der Schleifen Inhalt ausgeführt wird sobald die bedingung in der Klammer wahr ist und da 1 gleich wahr ist wird der Inhalt endlos ausgeführt weil sich die Bedingung nicht verändert!
Gruß Michi
Als nächstes werde ich mal versuchen einen Analog-Eingang vom Poti direkt an eine LED weiterzugeben. Falls es schwierigkeiten gibt werde ich sie gleich hier posten. Vielleicht entsteht hier ja ein kleines Tutorial das anderen Anfängern genau so weiter hilf wie mir.
Greetings Moonwalker..
Hi Moonwalker,
ach du meinst das Poti über den ADC einlesen und die LED per PWM entsprechend dimmen?
Gruß Michi
Ja genau das meine ich. 0-5V über den ADC einlesen und das ganze genau so wieder ausgeben. Aber heute wird da nicht so viel laufen, war ein langer abend gestern. Was mich auch noch interessieren würde: Die LED schaltet ein wenn z.B. 2,5V am Eingang X anliegen. Also bei 127 wenn der IC usw. genau
sind.
Lesezeichen