TWI mit AVR Studio

Gast #157806
Nabend.

Wollte fragen, ob jemand Erfahrungen mit TWI und dem ARV Studio hat.
Mein problem ist, wenn ich das TWI initialisiere, dann schicke ich zwar
auf das twcr Register bei twint eine eins, doch es bleibt auf null. In
der main Schleife angekommen, kann ich dann Tage warten, bis das TWI
einen Interrupt auslöst. Ist das Problem bei dem AVR Studio, oder hab
ich da einen Fehler in der Init...

Könnt ihr bitte mal einen Blick drauf werfen...

Danke

Gruß Avus


.include "m8def.inc"

.def temp = r16

.equ clock = 8000000
.equ twi_bit_rate = 32
.equ SCL_FREQ = clock/(16 + (2*twi_bit_rate*(4^0)))

rjmp Init

.org 0x011
rjmp twi_interrupt

Init:

ldi temp,low(ramend)
out spl,temp

ldi temp,high(ramend)
out sph,temp

ldi temp,(1<<twint)|(1<<twea)|(1<<twen)|(1<<twie)
out twcr, temp

ldi temp,twi_bit_rate
out TWBR,temp

ldi temp,(0<<twps0)|(0<<twps1)
out twsr,temp

ldi temp, $d0
out twar, temp

 sei

main:
rjmp main
Gast
Es gibt einen netten,kleinen Servicepunkt.
Nennt sich Stimuli.
Dort kannst du für/bei einem bestimmten Programmschritt eine Reaktion
des Simulators auslösen, z.B. einen Ausgang und/oder einen Eingang
setzen oder löschen.
Gast
Werden Flaggen nicht durch ne 1 gelöscht ? ;) (Gefährliches Halbwissen)

dave

PS: das hat bei mir funktioniert: (nach ner Stop irgendwie warten,
sonst wird das ganze als wiederholte Startsequenz gewertet)

twi_transmission:
  out TWDR, temp1
  ldi temp1, (1<<TWINT)|(1<<TWEN)
  out TWCR, temp1

  rjmp twi_wait


twi_read:
  ldi temp1, (1<<TWINT)|(1<<TWEN)
  out twcr, temp1

  rjmp twi_wait


twi_start:
  ldi temp1, (1<<TWINT)|(1<<TWSTA)|(1<<TWEN)
  out TWCR, temp1

  rjmp twi_wait


twi_stop:
  ldi temp1, (1<<TWINT)|(1<<TWSTO)|(1<<TWEN)
  out TWCR, temp1
  ret
Gast
@Dave

hi, du hattest recht. Ich habs im Datenblatt gefunden, daß das I Flag
mit einer 1 gelöscht wird.

Du hast mir ja geschrieben, das Programm bei Dir ausschaut, aber wie
siehts mit der Init von mir aus. Ist die in Ordnung?


Gruß Avus
Gast
ldi temp1, 32
  out twbr, temp1

Das wars bei mir ;)

Aber im Datenblatt ist eh alles ganz genau beschrieben, einfach nochmal
durchlesen (extra Code dabei, am Ende von "Using TWI")

dave
Gast
ja, aber wo ist der Unterschied ob ich jetzt

ldi temp1, 32
  out twbr, temp1


oder

.equ twi_bit_rate = 32


ldi temp,twi_bit_rate
out twbr,temp

mache?

Gruß Avus
Gast
Ich hab ja nix gesagt, hab dir nur gesagt, wies bei mir aussieht ;)

Bau die Hardware zusammen... davor kann man eh fast nix sagen bzw.
macht sich viel zu viel Arbeit, was nacher nur 10sek dauert.

dave
Gast
>>Bau die Hardware zusammen<<

Na ja. Ich bin erst beim Master Transmitter...

Wie der Code dann beim Slave Receiver ausschauen sollte, davon habe ich
momentan noch 0 Plan.

Deshalb möchte ich mal sicher gehen, daß der Code beim Master
Transmitter einwandfrei funktioniert, da sonst die Fehlersuche nicht 10
Sekunden sondern Tage dauern kann.

Gruß Avus
Gast
So, ich hab es jetzt mit einer Led probiert,das sie angeht, sobalt der
TWI Interrupt ausgelöst wird. Aber es tut sich nichts...

Hab auch versucht das twsta flag in der Init auf eine 1 zu schreiben.
Doch es tut sich nichts.

Wann muß das twsta flag gesetzt werden=? in der Init oder erst im
Interrupt.

Danke für jede Antwort

Gruß Avus
Gast
Hi Dave...

Ich bin noch beim Transmitter... das flag twsta hab ich gesetzt, doch
es tut sich nichts, im AVR Studio und im Atmega 8 auch nichts...

Wo soll ich ein Timeout einbauen???

Ich poste mal das ganze programm, vielleicht hat mal wer kurz Zeit, um
zu schauen, warum mein Interrupt nicht kommt.

Den Interrupt habe ich mit einschalten einer Led verbunden.

Danke im voraus

Gruß Avus
Angehängte Dateien:
Gast
Ach ja... das ist nicht gut...

Dann gehört es wohl eher am Anfang in die Interruptschleife...

Aber das funktioniert leider auch nicht... Irgendein Flag fehlt mir
noch, um den Interrupt auszulösen...

Hast du sonst noch was gesehen?

Gruß Avus

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.