Forum: Mikrocontroller und Digitale Elektronik display über i2c an touch panel angeschlossen


von Pavel (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.