ADS1115 (16bit ADC) über I2C, ISR probelem (über Polling funzt es)

Gast #6136833
Lesenswert?
• ▲
▼
Hallo Zusammen,

spreche einen ADS1115 16 Bit ADC per I2C an, über ein Xplained Mini 
board (atmega328pb ist darauf verbaut).  3.3V Test Spannung wird über 
AIN0 eingelesen. Programmierumgebung Atmel Studio 7.

Habe eine Routine geschrieben die mit Polling arbeitet, die Auswertung 
funktioniert hier wie gewünscht.
Jedoch möchte ich die Routine über die ISR(TWI0_vect) laufen lassen.
Habe meiner Meinung nach genau das selbe Programm wie beim Polling.
Wenn ich das Programm mit breakpoints analysiere verändert sich je nach 
stelle der Messwert evtl timing probleme?

Wenn jemand einmal kurz über den Programmcode flitzen könnte und evtl 
ein problem findet wäre ich sehr dankbar.
Angehängte Dateien:
Gast #6136841
Lesenswert?
• ▲
▼
Panimo schrieb:
> Wenn jemand einmal kurz über den Programmcode flitzen könnte und evtl
> ein problem findet wäre ich sehr dankbar.

So viel Tabs im Code, das tut man nicht. Wie kan man nur
eine Source so mit Tabs versauen?

C-Dateien als Text-Dateien posten, das tut man nicht.

Wegen der "Unlesbarkeit" der Source schau ich mir das
erst mal nicht an.
#6138590
Lesenswert?
• ▲
▼
ich vermute mal, dass hier i nicht verändert wird, weil int i ohne 
volatile deklariert wurde.
1
  case 0x28: 
2
    if (i==0)
3
    {
4
      TWDR0 = 0b11000001;                
5
      i++;          
6
      TWCR0 = (1<<TWINT) | (1<<TWEN) | (1 << TWIE)|(1<<TWEA);
7
      break;
8
    }
9
    else if (i==1)
10
    {
11
      i=0;
12
      .......
13
      countI2C++;
14
    }
Wenn i nicht korrekt zählt, dann verändert sich dein Zustand countI2C 
auch nicht...
Alternativ könntest du die (nur innerhalb der ISR genutzten) Variablen i 
und countI2C (wozu brauchst du deviceI2C?) auch als lokale Variablen mit 
static int deklarieren.
#6138935
Lesenswert?
• ▲
▼
nope, wenn ich breakpoints setze wird i hochgezaehlt wie gewünscht. Habe 
es natürlich im nachhinein geändert und auch getestet gleicher erfolg.

Das ist nur ein auschnitt eines Porgrammes um den ADC zu 
testen/analysieren, deviceI2C wird später weiter verwendet.

Trozdem danke für die mühe.
Gast #6138956
Lesenswert?
• ▲
▼
War da nicht mal ne Empfehlung, dass die ISR so kurz wie möglich sein 
soll?

Auserdem meine ich mich zu erinnern bei Übertragungen per I2C den
Interrupt abschalten zu müssen damit Übertragung nicht gestört wird.

Ich denke da solltest du mal darüber nach denken.

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.