Forum: Mikrocontroller und Digitale Elektronik TWI kann nicht simuliert werden


von Daniela S. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich versuche mich gerade daran einen LED Treiber, welcher per I2C 
anzusteuern ist zum laufen zu bringen. Leider scheitere ich kläglich. 
Bei dem Chip handelt es sich um einen TLC59116 von TI, der Controller 
ist ein Atmega8 mit 16MHz Quartz. Mit einer Bascom Software kriege ich 
die Hardware zu laufen, aber Bascom ist mir so unsympathisch. Mein C 
Programm schreibe ich im AVR Studio, womit man es ja auch eigentlich 
simulieren können sollte. Da fangen aber schon die Probleme an. Immer 
wenn mein Programm versucht eine der Funktionen twiStart oder twiSend zu 
benutzen bleibt die Simulation stehen. Ich kann nicht sehen, das der 
Simulator überhaupt in die Funktion rein springt. Ist bestimmt was recht 
einfaches, aber ich komme gerade nicht drauf. Währt ihr also so lieb mal 
drüber zu schauen?

Danke schonmal Daniela

von Daniela S. (Gast)


Lesenswert?

Hmm keiner ne Idee woran es liegen könnte, daß scheinbar der 
Funktionsaufruf nicht klappt?

von Oliver (Gast)


Lesenswert?

Ohne jetzt da ins Detail reinzuschauen, hängt die Simulation des 
Hardware-TWI normalerweise deshalb, weil die Slaves nicht da sind, und 
damit niemals irgendwas vom Bus zurückkommt.
Also Simulation anhalten, und das fehlende Bit in den Registern von Hand 
setzten, dann geht es auch weiter.

"Reinspringen" sollte der Debugger in dir Funktionen aber schon. Hast du 
ohne Optimierung kompiliert?

Oliver

von Daniela S. (Gast)


Lesenswert?

Ja das mit den fehlenden Interrupt ist mir bewusst. Mein Problem ist 
momentan, daß der Debugger einfach nicht in die Funktion springt. 
Initialisierung vom TWI klappt noch, sobal ich jedoch in die twiStart 
springen will bleibt die Simulation stehen. Sie kommt erst gar nicht bis 
zu der Stelle, wo sie auf den Interrupt warten müsste.

von Simon K. (simon) Benutzerseite


Lesenswert?


von Michael A. (micha54)


Lesenswert?

Daniela S. wrote:
> Hmm keiner ne Idee woran es liegen könnte, daß scheinbar der
> Funktionsaufruf nicht klappt?

Hallo,

Ansicht Dissassembler aktivieren, dann im Assembler-code durchsteppen.

Gruß,
Michael

von Oliver (Gast)


Lesenswert?

>Ansicht Dissassembler aktivieren, dann im Assembler-code durchsteppen

Noch besser. Auf den Mega flashen, Gehäuse runterschleifen, und unterm 
Rasterelektronenmikroskop nachschauen, wie die Bits durch den Prozessor 
flitzen.

Wenn das Programm ohne Optimierung (-O0) kompilert wurde, lässt es sich 
auch problemlos im C-Sourcecode debuggen, und bleibt dann bei
1
while(!(TWCR & (1<<TWINT)));          //Warten auf das Interruptflag;
hängen. Dort hängt es natürlich auch bei eingeschalteter Optimierung. 
Wenn man die Simulation mittels "break" abbricht, findet das Studio bei 
mir auch dann die richtige C-Zeile.

Oliver

von Daniela S. (Gast)


Lesenswert?

@Oliver

du kommst problemlos bis zu der Zeile? Komisch, bei geht der Pfeil der 
die Zeile anzeigt einfach verloren beim Funktionsaufruf. Abbrechen kann 
ich dann die Simulation auch nicht mehr. Ich muss sie erst Resetten um 
den Stop Button drücken zu können. Auch das manuelle Auslösen des 
Interrupt bringt keine Abhilfe.

von Oliver (Gast)


Lesenswert?

>Komisch, bei geht der Pfeil der
>die Zeile anzeigt einfach verloren beim Funktionsaufruf.

Das tut er bei mir auch, wenn ich bei mit Optimierung per F10 (step 
over) da duchsteppen will. Break im Menu Debug ist aber möglich und 
landet dann auch in der richtigen Zeile.

F11 (step into) springt zwar etwas unmotiviert durch die Funktionen, 
funktioniert aber ansonsten.

Sinnvoller ist das alles natürlich ohne Optimierung.

getestet mit:
AVRStudio V4.16, WinAVR2009xxx, Simulator

Zip doch mal den Projektordner zusammen und stell den hier ein.

Oliver

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.