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.
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.
Kein problem so ist es vill besser
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.