12.4.10: In System Programming
Irgendwann wurde mir das zu aufwendig, immer den Tiny25 aus der Fassung nehmen, auf die Programmierplatine, dann wieder zurück für den nächsten Versuch usw. Also ISP: Der Controller muss auf der Platine programmiert werden können. Und wenn die Platine keinen ISP-Anschluss hat? Dann löte ich einfach ein passendes Kabel an das IC.
Für die Ansteuerung eines Radio-ICs SI4735 habe ich zuerst
einen Tiny13 verwendet,
als dann der Speicherplatz nicht mehr reichte einen Tiny25. Auch
diesen kann man auf der Platine des Lernpakets Mikrocontroller
programmieren, allerdings nur mit LPmikroISP.exe, und man darf auf
keinen Fall
die Fuses damit programmieren, denn die Einstellungen passen nur
für den Tiny13
und schicken den Tiny25 ins Nirvana.
Irgendwann wurde mir das zu aufwendig, immer den Tiny25 aus der Fassung nehmen, auf die Programmierplatine, dann wieder zurück für den nächsten Versuch usw. Also ISP: Der Controller muss auf der Platine programmiert werden können. Und wenn die Platine keinen ISP-Anschluss hat? Dann löte ich einfach ein passendes Kabel an das IC. Achtung, man muss den Controller zum Löten aus dem Sockel nehmen, sonst lötet man ihn unweigerlich im Sockel fest.
Das kennt man, ein Programmfehler versteckt sich hartnäckig und ist einfach
nicht zu finden. In Bascom-Programmen versuche ich dann immer Zwischenzustände anzusehen. Ist
in den einzelnen Variablen drin, was draufsteht? Kürzlich wieder so ein Fall:
Ein Array Kalbyte(64) wird beim Start gefüllt und nach allem was ich sehe nie
wieder geändert sondern nur noch gelesen. Ich packe das Wort Kalbyte in die Suchfunktion und gehe den ganzen Quelltext
durch. Nichts! Es wird nie wieder explizit verändert.
Dim Kal(8) As Word
Dim Nul(8) As Byte
Dim Kalbyte(64) As Byte
Und dann ein Idee: Was ist denn mit den Variablen davor? Aha, es sind auch Arrays. Mal angenommen, irgendwas wird falsch berechnet und die Arrays davor werden mit zu großen Indizes benutzt, also z.B. Nul(16) beschreiben, obwohl es nur bis Nul(8) gibt. Dann würden Teile von Kalbyte eben doch verändert. Mit dieser Erkenntnis noch mal ganz scharf hingeschaut: Tatsächlich, ein Rechenfehler genau in diesem Bereich. Bascom kann beim Kompilieren keinen Fehler entdecken, richtig rechnen muss man eben selber.