Forum: Mikrocontroller und Digitale Elektronik vor USI_START interrupt andere Aufgaben fertig machen


von Michael L. (nightflyer88)


Lesenswert?

Hallo Zusammen

Ich bin gerade dabei das ATMEL USI interface eines ATtiny85 als I2C 
Slave zu nutzen. Die ganze Kommunikation mit dem I2C Bus funktioniert.

Nun mache ich im Hauptprogramme Berechnungen, sind die Werte berechnet, 
übergebe ich die Daten in einen Datenpuffer, der dann vom Master 
ausgelesen werden kann. Während der datenübergabe in den Datenpuffer 
schalte ich das USI_START interrupt aus (atomarer Zugriff).

Jetzt habe ich das Problem, dass während dem ausschalten des USI_START 
interrupts, manchmal eine Start Kondition verpasste wird, und dadurch 
Fehlübertragungen entstehen.

Das ganze sieht etwa so aus:

Do                                'Hauptprogramm
  B = Getadc(3)
  C = 1023 - B
  C = C - 510
  C = C * 5
  E = C

  B = Getadc(2)
  D = B
  D = D * 50
  D = D / 26
  F = D

  Disable Usi_start               'atomarer Zugriff
  Strom = E
  Spannung = F
  Enable Usi_start
Loop


Hat jemand einen besseren Lösungsvorschlag, damit ich bei einem 
USI_START interrupt, zuerst andere Aufgaben fertig machen kann ?

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.