Archiv verlassen und diese Seite im Standarddesign anzeigen : Einfache Frage... ode besser Starthilfe 2
moonwalker99
10.09.2005, 11:54
Ich habe grad folgendes kleines Programm geschrieben:
PS: Ich benutze Myavr-Board.
//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;
}
Ich kann drücken wie ich will, da leuchtet nichts... ?
PS: Habe gerade mal an pin D.2 gemessen, passt alles. Unbetätigt liegen +5V an, betätige ich den Taster liegen 0V an.
Dino Dieter
10.09.2005, 12:10
Hallo
Fehlt hier nicht eine Klammer
if ( ! PIND & 0x04) //Wenn PortD Bit2 0 hat
sollte doch so sein
if ( ! (PIND & 0x04)) //Wenn PortD Bit2 0 hat
Gruß
Dieter
michaelb
10.09.2005, 12:16
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:
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;
}
so
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;
}
wenn du die Endlosschleife hast wird der Taster die ganze Zeit abgefragt und nicht nur einmal ganz am Anfang!
Gruß Michi
Dino Dieter
10.09.2005, 12:17
Achso
Es fehlt auch noch eine Endlosschleife, sonst ist das Programm so schnell zu Ende, das du keine Zeit hast, zu drücken
//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;
}
moonwalker99
10.09.2005, 12:29
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?
michaelb
10.09.2005, 12:42
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
moonwalker99
10.09.2005, 16:19
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..
michaelb
10.09.2005, 18:49
Hi Moonwalker,
ach du meinst das Poti über den ADC einlesen und die LED per PWM entsprechend dimmen?
Gruß Michi
moonwalker99
11.09.2005, 11:16
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.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.