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
Hmm keiner ne Idee woran es liegen könnte, daß scheinbar der Funktionsaufruf nicht klappt?
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
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.
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
>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
@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.
>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.