mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik TWINT Flag wird nicht gesetzt


Autor: Kai (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich schreibe gerade für den Atmega128L im AVR-GCC die nötigen Routinen
für die I2C-Steuerung. Für die Initialisierung setze ich dabei folgende
Register:

TWAR = 0x00;
TWBR = 0xFF;
TWSR |= 0x00;
TWDR = 0x00;

Beim Code für den Schreibzugriff hängt der Compiler in der
Abfrage-Schleife fest:

CS_CLEAR;
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);  //Übertrage StartCond
while (!(TWCR & (1<<TWINT)));

Offenbar wird das TWINT-Flag nie gesetzt. Selbst wenn ich nur den AVR
ohne Peripherie laufen lasse hängt er an dieser Stelle.

Woran liegt das?

Vielen Dank im Vorraus
Gruß
Kai

Autor: Kai (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich muss diesen Beitrag nochmal pushen, da mir das Problem sehr unter
den Nägeln brennt und ich bisher keine Lösung finden konnte.

Selbst der Logic-Analyser zeigt weder auf der SCL noch auf der SDA
Leitung eine Reaktion, wenn ich die Start-Condition wie im Handbuch
beschrieben einleite.

Kennt jemand das Problem?
Danke
Kai

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mega103 Kompatibilitätsmode beim Mega128 auch ausgeschaltet ?

Autor: Kai (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Mega103 Kompatibilitätsmode beim Mega128 auch ausgeschaltet?"
Ja, der ist aus. In dem 103er-Modus ist der 128er auch kaum zu
gebrauchen.

Gruß
Kai

Autor: Kai (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann es sein, dass es daran liegt, dass an den TWI-Leitungen keine
PULL-UP-Widerstände hängen?
Ich dachte, wenn ich die Leitungen am Port auf High-Lege müsste das
reichen.

Gruß
Kai

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Pull-Ups brauchst Du auf jeden Fall.

Autor: Kai (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, daran lag es.
Also TWI ohne PULL-UPs läuft nicht.

Danke
Gruß
Kai

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe genau das gleiche Problem, dass TWINT in der Simulation mit AVR
Studio nicht gesetzt wird!

Wie kann ich das in AVR Studio Simulieren?
Ohne reale Hardware mit Pull-ups?

Autor: peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch mein Programm:
Wie kann ich das im AVR Studio Simulieren, damit ich auch einen
Pegelwechsel an der SDA SCL-Leitung sehe?

#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>

#define F_CPU         8000000
#define USART_BAUD_RATE   19200
#define USART_BAUD_SELECT   (F_CPU/(USART_BAUD_RATE*16L)-1)

//#define SCHIEBETAKT      10000
//#define  TWI_VORTEILER    1
//#define BITRATENFAKTOR    ((F_CPU/SCHIEBETAKT)-16)/(8*TWI_VORTEILER)






void twi_init(void)
{
  //CLK 10 kHz
  TWSR = 1;
  TWBR = 98;
}

void twi_sende_byte(unsigned char adresse, unsigned char daten)
{
  TWCR =(1<<TWINT) | (1<<TWSTA) | (1<<TWEN); //sende Startbedingung
  while(!(TWCR & (1<<TWINT)));  //warte bis TWI Interrupt Flag = 1
  TWDR = adresse;          //Adresse in Senderegister schreiben
  TWCR = (1<<TWINT) | (1<<TWEN);  //setze TWI Interrupt Flag = 1
  while(!(TWCR & (1<<TWINT)));  //warte bis TWI Interrupt Flag = 1
  TWDR = daten;          //Daten in Senderegister schreiben
  TWCR = (1<<TWINT);        //setze TWI Interrupt Flag = 1
  while(!(TWCR & (1<<TWINT)));  //warte bis TWI Interrupt Flag = 1
  TWCR =(1<<TWINT) | (1<<TWSTO);  //sende Stopbedingung

}



int main(void)
{
  sei();
  twi_init();
  twi_sende_byte(5,123);

  while(1);

}

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.