hey,
ich bastel gerne mit microcontroller. zurzeit habe ich einen atmega
2560. an diesem habe ich über i2c ein touch panel angeschlossen von dem
hersteller electronic assembly. ich kann über den i2c bus daten ans
panel schicken und bekomme auch mein gewünschtes bild angezeigt. jeder
touch taste auf dem panel gebe ich beim erstellen eine nummer, die beim
drücken im sendebuffer des displays gespeichert wird. sobald eine taste
gedrückt ist löst am controller eine externer interrupt aus. in dieser
routine will ich dann die tastennummer in mein array speichern...genau
da hab ich aber irgendwie en problem...:-(
ich hab nur den teil von meinem programm, wo ich denk, dass der fehler
liegt angefügt...falls jemand mehr infos braucht...bitte melden...bin
für jeden noch so kleine tipp dankbar ;-)
wär echt voll top, wenn mir jemand helfen könnte
uint8_t i2c_receive (uint8_t ack)
{
if (ack == 1)
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWEA);
else
TWCR = (1<<TWINT) | (1<<TWEN);
while (!(TWCR & (1<<TWINT)));
return TWDR;
}
uint8_t puffer_auslesen(void)
//liest den pufferinhalt aus dem display und speichert die daten in
e_buffer
//rückgabe:1=alles ok, 0=fehler
{
uint8_t len,i,pruefsumme;
uint8_t ack;
i2c_start(BASEADR|TW_WRITE); //der teil hier funktioniert, des is
der befehl ans display, dass man den sendepuffer auslesen will, mann
bekommt dann direkt die einzelnen bytes geschickt...
i2c_write(DC2);
i2c_write(0x01);
i2c_write('S');
i2c_write(0x66);
i2c_stop();
i2c_start(BASEADR|TW_READ); //in diesem abschnitt liegt glaub ich
irgendwo der fehler
i2c_receive(1); //ack lesen
e_buffer[0] = i2c_receive(1); //beginn datenrahmen
e_buffer[1] = i2c_receive(1); //anzahl nutzdaten
i2c_stop();
}
ISR(PCINT2_vect) //interruptrotine ->initialisierung
funktioniert
{
cli();
puffer_auslesen(); //in deser funktion werden die daten aus dem
display über i2c ins array gespeichert
tastenNr = e_buffer[1]; //die tastennummer steht an dieser stelle
im array
sei();
}
int main (void)
{
i2c_init(); //i2c initalisieren->funktioniert
startbildschirm(); //über i2c daten ans display senden->funktioniert
auch, startbildschirm wird angezeigt
init_exint(); //sobald am display eine taste gedrückt wird geht
eine pin am display auf low,
//diesen hab ich am pcint23 angeschlossen, dann will ich in der
interruptroutine die daten
//bzw die tastennummer auslesen
while(1);
}
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.