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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren