Hi,
ich bin noch AVR Anfänger, und hab auch mir auch schon das AVR Tutorial
angeschaut.
Nun habe ich noch eine Frage, wie ich eine Taster Einstellung einlesen
kann. Ich habe an Port D, Pin 2 und Pin 1 jeweils einen Taster
angeschlossen, mit dem ich an Port C, Pin 0 und Pin 5 eine LED schalten
möchte.
Hier mein Code:
#define F_CPU 100000
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdint.h>
void io()
{
DDRB = 0x11;
DDRD = 0xFF;
}
void long_delay(uint16_t ms)
{
for (; ms>0; ms--) _delay_ms(1);
}
int main()
{
io();
while (1)
{
if ( PIND & (0<<PIND1) )
{
long_delay(1000);
PORTB = 0b00000001;
}
if ( PIND & (0<<PIND2) )
{
long_delay(1000);
PORTB = 0b00010000;
}
}
return 0;
}
Vielen Dank schon mal für eure Hilfe
Gruß
Michael
Da brauchst du nichts entprellen, weil immer das gleiche passiert: Wenn
"PIND & (0<<PIND1)" kommt, dann wird "PORTB = 0b00000001" geschaltet,
egal, ob einmal, oder mehrmals.
Hallo,
die LED auch an PortB anschließen?
Zitat: mit dem ich an Port C, Pin 0 und Pin 5 eine LED schalten möchte.
Ja was denn nun?
Gruß aus Berlin
Michael
Die LED's sind an Port B angeschlossen, die Taster an Port D.
Das Problem ist, ich will mit einem Taster 1 Led 1 einschalten und mit
Taster 2 Led 2. Und wenn ich beide Schalter drücke, sollen beide Led's
angehen...
Hallo,
immernoch ASM-Programmierer und ohne richtige C-Kenntnisse, trotzdem:
wenn er bei gedrückter Tste das Pin auf 0 abfragen will, sollte es dann
nicht z.B.
if ((PIND&(1<<PD1)) == 0)
{
//tuwas
}
heißen?
Gruß aus Berlin
Michael
hier nochmal mein code, ich messe jeweils an einem ausgang 5V und an dem
anderen Ausgang 2,5V. Realisiert durch jeweils einen Taster....
#define F_CPU 8000000
#include <avr/io.h>
#include <stdint.h>
void io()
{
DDRB = 0xFF;
PORTB = 0x00;
DDRD = 0x00;
PORTD = 0xFF;
}
int main()
{
io();
while (1)
{
if (( PIND & (1 << PD3)) == 0)
{
PORTB = 0b00010000;
}
if (( PIND & (1 << PD2)) == 0)
{
PORTB = 0b00000001;
}
else
PORTB = 0;
}
return 0;
Das "else PORTB = 0;" bezieht sich nur auf das zweite if.
Wenn du also den Taster an PD3 drückst, wechselt PB4 sehr schnell
zwischen 0 und 5 V hin und her. Macht im Mittel dann 2,5 V.
Ändere die Zeile
1
if((PIND&(1<<PD2))==0)
in
1
elseif((PIND&(1<<PD2))==0)
und du wirst an beiden Pins 5 V messen.
> Und wenn ich beide Schalter drücke, sollen beide Led's> angehen...
Das wird nach der Änderung dann aber nicht mehr gehen.