Forum: Mikrocontroller und Digitale Elektronik I2C Sensor auslesen, USART


von Programmierer (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute!

Ich möchte gerne einen BMA020 Sensor auslesen (über TWI/I2C). Diese 
Daten sollen anschließend über USART an eine Matlab Oberfläche gesendet 
werden und visualisiert werden. (Hier sind verschiedene Modi möglich: 
Initialisierung, Messung, Pause)
Jetzt meine Frage: Kann jemand bitte einmal mein Programm durchschauen 
und mir evtl sagen, wo mein Fehler bzw meine Fehler liegen? (Die 
Funktionen von DATA_SYNC waren vorgegeben)

Im Anhang befindet sich das Programm (Atmel Studio 6.2).

Vielen Dank schon mal vorab :)

LG

von Programmierer (Gast)


Lesenswert?

Zusatz: Ich verwende einen Atmega32 und ein STK500 ;)

von Karl H. (kbuchegg)


Lesenswert?

In den TWI Routinen

So etwas
1
...
2
  while((TWSR & 0xF8)!= 0x10); // prueft acknowledgement
3
...

ist mutig. Wenn du kein Acknowledge kriegst, dann ist das ein Fehler! Da 
kann dein Code solange warten wie er will, wenn nach dem Abwarten der 
Kommunikation kein Acknowledge vorliegt, dann kommt der auch nicht mehr.

-> Im Fehlerfall hast du eine Endlosschleife.


Abgesehen davon: was bzw. welche Subsysteme hast du denn schon 
unabhängig vom Gesamtprojekt einzeln getestet? Funktioniert die UART? 
Funktionert die Steuerung in Data_Sync? Hast du die TWI Funktionen schon 
mal losgelöst von der Aufgabenstellung getestet. Zb. in dem du mit einer 
LED kontrolliert hast, ob du entsprechende Reaktionen vom BAM kriegst? 
Hast du deine Statemachine in der ISR soweit getestet, dass sie richtig 
reagiert, selbst wenn du die TWI Kommunikation da einfach mal durch eine 
Fake-Variante ersetzt, die einfach mal irgendwelche Werte in das 
DataArray einträgt und du im Frontend nachsiehst, ob die auch 
tatsächlich ankommen.

Oder ist das wieder mal so ein Thread, wo du tage- bzw. wochenlang Code 
produziert hast, ohne den in irgendeiner Form zwischendurch immer wieder 
mal zu testen und dich dann wunderst, warum das Gesamtsystem nicht auf 
Anhieb funktioniert und du keine Ahnung hast, wo du mit der Fehlersuche 
auch nur anfangen sollst?
Denn: so etwas ist gerade bei unerfahrenen Neulingen immer ein schwerer 
Fehler! Man produziert nicht massig Code in der Annahme, man würde das 
schon auf Anhieb fehlerfrei bewältigen können.

: Bearbeitet durch User
von Programmierer (Gast)


Lesenswert?

Also ich habe folgendes getestet: USART, Data_Sync wurde korrekt 
vorgegeben, genau wie die ISR.
Aus diesem Grund weiß ich nicht, wo noch der Fehler sein könnte. Die TWI 
Funktionen waren auch fast alle vorgegeben bis auf die Send und Receive, 
habe ich da evtl etwas falsch nacheinander aufgerufen/übergeben?

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.