Forum: Mikrocontroller und Digitale Elektronik ADS1115 (16bit ADC) über I2C, ISR probelem (über Polling funzt es)


von Panimo (Gast)


Angehängte Dateien:

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.

von OMG (Gast)


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.

von Ye K. (panimo)


Angehängte Dateien:

Lesenswert?

Kein problem so ist es vill besser

von Bernhard S. (b_spitzer)


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.

von Ye K. (panimo)


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.

von norad (Gast)


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.

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.