Hilfsmittel

Das kostenlose Elektronik-Simulationsprogramm SimulIDE ist über die SimulIDE-Homepage herunterladbar. Im Gegensatz zu TINA TI hat dieses Programm einen anderen Fokus und damit folgende Vor- und Nachteile:

Vorteile:

  • Microcontroller wird gut simuliert (u.a. von Atmel Chips).
  • Diese Microcontroller sind auch programmierbar und kann Microcontroller-geeignete Source-File (hex-File) nutzen.
  • Interaktion Software und Hardware ist möglich

Nachteile:

  • Simulation der Elektronikkomponenten nur vereinfacht implementiert
  • Software ist recht neu, damit nicht immer stabil. Einige Kinderkrankheiten sind aber bereits ausgemerzt
  • Es kann nur ein einziger Mikrocontroller gleichzeitig simuliert werden
  • Falls der Text nach dem Öffnen des Programms zu klein dargestellt wird, kann eines der folgenden Vorgehen helfen:
    • Im Programm SimulIDE nach dem öffnen auf den beigefarbenen Hintergrund (links)klicken. Dann auf der linken Seite den Reiter Properties auswählen. Dort bei Font Scale beispielsweise 2,0 eintragen und das Programm neu starten.
    • Im Explorer rechtsklick » Eigenschaften » Kompatibilität » Hohe DPI Einstellungen ändern » Hohe DPI-Skalierung überschreiben » Häkchen setzen » „System“ auswählen. (ggf. „System (Erweitert)“ wählen)

Atmel Studio

Atmel Studio ist eine Programmierumgebung, um aus C oder C++ ein Microcontroller-geeignetes Source-File (hex-File) zu erstellen.

Die aktuelle Version des Programms finden Sie auf der Microchip-Homepage.

  • Nutzen Sie die Anzeige von Zeilennummern: Tools » Options » Text Editor » All languages » General » Line numbers
  • Falls auf der rechten Seite der Solution Explorer (Anzeige der Dateien im Projekt) nicht vorhanden ist, so finden Sie diesen unter
    View » Solution Explorer (<CTL>+<ALT>+<L>)
  • Ich empfehle ATMLE Studio in der Sprache „English“ zu nutzen. Damit sind die Hinweise in diesem Kurs korrekt zu finden. Falls Sie versehentlich (z.B. bei der Installation) die deutsche Sprache eingestellt hatten, können Sie es unter Werkzeuge » Optionen » environment » international settings » Language korrigieren.

Häufige Fehler

  • F_CPU not defined for (z.B. <util/delay.h>) Das beste ist die Frequenz F_CPU im AVR Studio direkt anzugeben:
    • Gehe zu Menu: Projekt » (ProjektName) Eigenschaften » Toolchain » AVR/GNU C Compiler » Symbols
    • Füge F_CPU=8000000 (bzw. Passende Frequenz) ein
  • Das Programm kompiliert nicht TWSR not found : Falls Sie einen modernen AVR Chip nutzen (z.B. 328PB) so kann dieser mehrere SPI und I2C Schnittstellen haben. Damit haben sich bei diesem Target auch die Register- und Interruptvektornamen geändert. Statt TWSR ist dann TWSR0 oder TSWR1 zu verwenden - je nach gewünschtem Pin. Dies ist am einfachsten über defines der fehlerhaften Namen, also #define TWSR TWSR0 usw.
  • Beim Flashen der realen Hardware über Tools » Device Programming finde ich im Tool nur „Simulation“, aber kein STK500. Versuchen Sie zunächst über Tools » Add tagret… STK500 und den entsprechenden Serial Port zu wählen. Falls Ihr Rechner mehrere USB Ausgänge hat, müssen Sie diese (COM1…COMx) beim Programmieren ausprobieren.
  • Beim Flashen der realen Hardware erhalte ich „Erasing device failed“, „Error status received: Got 0xc9, expected 0x00 (An unknown command was sent)„.
    • Steht bei Device Programming das Interface auf ISP? Falls nicht kann dies die Ursache sein. Das Programming geschieht immer mittels ISP.
    • Hat das USB-Kabel/Progi/Adapterplatine/Kabel ein Problem? Probieren Sie eine andere Variante der Komponenten durch
  • Mein Chip hat keinen Speicherplatz mehr bzw Ich erhalte ein 'Memory Overflow' Fehler Falls Sie Daten statt im SRAM im EEPROM speichern wollen, so können Sie das Befehlswort „PROGMEM“ nutzen. Details dazu finden Sie z.B. auf der Seite von Microchip
  • Auf den I2C Leitungen ändert sich nichts, obwohl der IC etwas ausgeben sollte:
    1. Überprüfen Sie die Pullup-Widerstände: Sind welche verbaut? Welche Größe haben diese? (typisch: 10kOhm). Wenn keine Verbaut sind, so wechselt das Signal nur zwischen 0V niederohmig und 0V hochohmig. Dies ist am Oszilloskop nicht zu unterscheiden.
    2. Ist ein hochohmiger Widerstand $R_L$ entlang der Leitungen verbaut? Falls ja erzeugt dieser einen Spannungsteiler mit dem Pullup-Widerstand. Wenn $R_L$ groß ist, so liegt zwischen $R_L$ und Pull-up fast die Versorgungsspannung an.
  • Mein Programm scheint irgendwo nicht weiter zu kommen. Dies kann verschiedene Gründe haben:
    • Endlosschleife
    • Speicherüberlauf im RAM: sobald die Speicherauslastung des RAM über ca 75% steigt, sind Probleme wie spontane Resets bei Bearbeiten von Pointern, Arrays, Strings oder Structs wahrscheinlich. Die kann über Debugging herausgefunden werden (entweder mit Steppen mit Debugger oder Ausgabe von Werten nach jeder Zeile).