mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme ATmega164P + PCA9554


Autor: Luky S. (luky)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe eine simple Testroutine zum Ansteuern eines externen I2C 
Treiberbausteines erstellt. Leider reagiert der Baustein überhaupt nicht 
auf die Ansteuerung...
Ich habe die Kommunikation auf dem Bus mal aufgezeichnet und angehängt.
#define ADDRESS 0x20

void Init_TWI (void)
{
  TWBR = 72; //set Bus speed 100kHz @16Mhz MCKL
}

void TWI_send_start (void)
{
  TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN); //Send START condition
  while (!(TWCR & (1<<TWINT))); //Wait for TWINT Flag set.
}

void TWI_send_add_rw (unsigned char address, unsigned char rw)
{
  unsigned char addr_byte = 0;

  addr_byte = address << 1; //shift address one bit left
  addr_byte |= rw; //set RW-Bit, if necessary

  TWDR = addr_byte;
  TWCR = (1<<TWINT) | (1<<TWEN); //send content of TWDR
    while (!(TWCR & (1<<TWINT))); //wait, until address has been sent
}

unsigned char TWI_read_byte (void)
{
  TWCR = (1<<TWINT) | (1<<TWEA) | (1<<TWEN);
    while (!(TWCR & (1<<TWINT))); //wait, until byte has been received
  return TWDR;
}

void TWI_send_byte (unsigned char byte)
{
  TWDR = byte;
  
  TWCR = (1<<TWINT) | (1<<TWEN); //send content of TWDR
    while (!(TWCR & (1<<TWINT))); //wait, until byte has been sent
}

void TWI_send_stop (void)
{
  TWCR = (1<<TWINT) | (1<<TWSTO) | (1<<TWEN);  
  delay_ms(1); //wait a bit
}

int main(void) {
  
  Init_TWI();
      
while (1) {
    

  TWI_send_start ();

  TWI_send_add_rw (ADDRESS, 0);

  TWI_send_byte (0x1);
  TWI_send_byte (0x0);
  TWI_send_stop ();
  USART_transmit(input);


  delay_ms(2000);
      
}  //while


} //main


Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.