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.