CsT
09.02.2007, 17:49
Hallo,
ich halte hier gerade mein erstes Controllerboard in der Hand und habe schon ein paar Schwierigkeiten ..
LED´s ansteuern und Motor steuern klappt schon, allerdings komme ich nicht mit den 5 verbauten Tastern zurecht.
Ich weiß, dass die analog auf A7 zu finden sind. Allerdings habe ich keine Ahnung, wie ich nun feststelle, welcher Taster gedrückt wurde. Je nach Tasterdruck möchte ich eine andere LED ansteuern, dass bekomme ich ja dann selber hin ..
Kann jemand bitte einen Beispielcode zu dem ADC und den Tasten posten? Alles, was ich bis jetzt zusammengekratzt habe, hat nicht so funktioniert, wie ich wollte ..
[php:1:628026f8b3]// AVR-Includes
#include <avr/io.h>
// Funktionen
unsigned int Tastenabfrage (void)
{
unsigned char i;
unsigned char Tasternr = 0;
unsigned int Tasteradc = 0;
PORTA |= (1<<PA7); /* internen Pull-Up an PA7 aktivieren */
ADCSRA = (1<<ADEN) | (1<<ADPS2)| (1<<ADPS1) | (1<<ADPS0); // Frequenzvorteiler hier: 128
ADMUX = (0<<MUX4) |(0<<MUX3) |(1<<MUX2) | (1<<MUX1) | (1<<MUX0);
ADMUX &= (0<<ADLAR); // Standard Ausrichtung
ADMUX &= (0<<REFS1) & (0<<REFS0); // Referenzspannung an AREF nutzen
ADCSRA |= (1<<ADSC); // eine ADC-Wandlung
while ( ADCSRA & (1<<ADSC) ); // auf Abschluss der Konvertierung warten
for (i=0;i<4;i++)
{
ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion"
while ( ADCSRA & (1<<ADSC) ); // auf Abschluss der Konvertierung warten
Tasteradc += ADCW; // Wandlungsergebnisse aufaddieren
}
ADCSRA &= ~(1<<ADEN); // ADC deaktivieren (2)
Tasteradc /= 4; // Summe durch vier teilen = arithm. Mittelwert
return Tasteradc;
}
int main (void)
{
char c;
unsigned int taste = 0;
DDRA = 0x00;
DDRC = 0xff;
PORTC = 0xff;
while (1)
{
while (taste == 0)
{
taste = Tastenabfrage();
}
if ((taste > 350)&&(taste<375))
{
PORTC &= ~(1 << 7);
taste = 0;
}
else if ((taste > 374)&&(taste<400))
{
PORTC &= ~(1 << 6);
taste = 0;
}
else if ((taste > 399)&&(taste<425))
{
PORTC &= ~(1 << 5);
taste = 0;
}
else if ((taste > 424)&&(taste<450))
{
PORTC &= ~(1 << 4);
taste = 0;
}
else if ((taste > 449)&&(taste<475))
{
PORTC &= ~(1 << 3);
taste = 0;
}
else if ((taste > 474)&&(taste<500))
{
PORTC &= ~(1 << 4);
taste = 0;
}
else if ((taste > 499)&&(taste<525))
{
PORTC &= ~(1 << 5);
taste = 0;
}
else if ((taste > 524)&&(taste<550))
{
PORTC &= ~(1 << 6);
taste = 0;
}
else if ((taste > 3000)&&(taste<4000))
{
PORTC &= ~(1 << 7);
taste = 0;
}
else if ((taste > 4000)&&(taste<5000))
{
PORTC &= ~(1 << 6);
taste = 0;
}
else if ((taste > 500)&&(taste<1000))
{
PORTC &= ~(1 << 5);
taste = 0;
}
else
{
PORTC = 0xff;
taste = 0;
}
}
}
[/php:1:628026f8b3]
Das habe ich mir bis jetzt zusammenkopiert .. bei Tastern 4 und 5 wird ein Motor angesteuert, bei den restlichen passiert nichts .. was mache ich falsch?
Grüße und vielen Dank schonmal
CsT
ich halte hier gerade mein erstes Controllerboard in der Hand und habe schon ein paar Schwierigkeiten ..
LED´s ansteuern und Motor steuern klappt schon, allerdings komme ich nicht mit den 5 verbauten Tastern zurecht.
Ich weiß, dass die analog auf A7 zu finden sind. Allerdings habe ich keine Ahnung, wie ich nun feststelle, welcher Taster gedrückt wurde. Je nach Tasterdruck möchte ich eine andere LED ansteuern, dass bekomme ich ja dann selber hin ..
Kann jemand bitte einen Beispielcode zu dem ADC und den Tasten posten? Alles, was ich bis jetzt zusammengekratzt habe, hat nicht so funktioniert, wie ich wollte ..
[php:1:628026f8b3]// AVR-Includes
#include <avr/io.h>
// Funktionen
unsigned int Tastenabfrage (void)
{
unsigned char i;
unsigned char Tasternr = 0;
unsigned int Tasteradc = 0;
PORTA |= (1<<PA7); /* internen Pull-Up an PA7 aktivieren */
ADCSRA = (1<<ADEN) | (1<<ADPS2)| (1<<ADPS1) | (1<<ADPS0); // Frequenzvorteiler hier: 128
ADMUX = (0<<MUX4) |(0<<MUX3) |(1<<MUX2) | (1<<MUX1) | (1<<MUX0);
ADMUX &= (0<<ADLAR); // Standard Ausrichtung
ADMUX &= (0<<REFS1) & (0<<REFS0); // Referenzspannung an AREF nutzen
ADCSRA |= (1<<ADSC); // eine ADC-Wandlung
while ( ADCSRA & (1<<ADSC) ); // auf Abschluss der Konvertierung warten
for (i=0;i<4;i++)
{
ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion"
while ( ADCSRA & (1<<ADSC) ); // auf Abschluss der Konvertierung warten
Tasteradc += ADCW; // Wandlungsergebnisse aufaddieren
}
ADCSRA &= ~(1<<ADEN); // ADC deaktivieren (2)
Tasteradc /= 4; // Summe durch vier teilen = arithm. Mittelwert
return Tasteradc;
}
int main (void)
{
char c;
unsigned int taste = 0;
DDRA = 0x00;
DDRC = 0xff;
PORTC = 0xff;
while (1)
{
while (taste == 0)
{
taste = Tastenabfrage();
}
if ((taste > 350)&&(taste<375))
{
PORTC &= ~(1 << 7);
taste = 0;
}
else if ((taste > 374)&&(taste<400))
{
PORTC &= ~(1 << 6);
taste = 0;
}
else if ((taste > 399)&&(taste<425))
{
PORTC &= ~(1 << 5);
taste = 0;
}
else if ((taste > 424)&&(taste<450))
{
PORTC &= ~(1 << 4);
taste = 0;
}
else if ((taste > 449)&&(taste<475))
{
PORTC &= ~(1 << 3);
taste = 0;
}
else if ((taste > 474)&&(taste<500))
{
PORTC &= ~(1 << 4);
taste = 0;
}
else if ((taste > 499)&&(taste<525))
{
PORTC &= ~(1 << 5);
taste = 0;
}
else if ((taste > 524)&&(taste<550))
{
PORTC &= ~(1 << 6);
taste = 0;
}
else if ((taste > 3000)&&(taste<4000))
{
PORTC &= ~(1 << 7);
taste = 0;
}
else if ((taste > 4000)&&(taste<5000))
{
PORTC &= ~(1 << 6);
taste = 0;
}
else if ((taste > 500)&&(taste<1000))
{
PORTC &= ~(1 << 5);
taste = 0;
}
else
{
PORTC = 0xff;
taste = 0;
}
}
}
[/php:1:628026f8b3]
Das habe ich mir bis jetzt zusammenkopiert .. bei Tastern 4 und 5 wird ein Motor angesteuert, bei den restlichen passiert nichts .. was mache ich falsch?
Grüße und vielen Dank schonmal
CsT