vor USI_START interrupt andere Aufgaben fertig machen

OP #3239799
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 ?

Antwort schreiben

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.

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.