mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik TWI mit AVR Studio


Autor: avusgalaxy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Wolle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: avusgalaxy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Wolle, klingt interresant, das mit dem Stimuli, aber du hast leider
meine Frage nicht beantwortet.

Gruß Avus

Autor: dave (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: avusgalaxy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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

Autor: dave (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: avusgalaxy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: dave (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: avusgalaxy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>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

Autor: avusgalaxy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: dave (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bist du beim Receiver?

STA = START Condition.
Darf der Master dann, wenn er anfängt was zu schreiben.

Bau noch ne Timeout ein.

dave

Autor: avusgalaxy (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: dave (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du weißt schon, dass du mit
ldi temp,(1<<twsta)
out twcr,temp
Die anderen Bits im Register löscht?

dave

Autor: avusgalaxy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

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.