1. Iteration, Arbeitsbereitschaft herstellen
In der ersten Projektiteration soll die Zielplattplattform, also die Hardware, hergestellt werden. Diese benötigen wir letztendlich zum Ausführen und Testen unseres Codes. Es ist zunächst unerheblich, ob wir die etwas unelegante Variante mit den aneinandergesteckten myAVR Add-Ons oder schon die sexy Bastellösung verwenden. Für Anfänger empfiehlt sich die Verwendung der Add-Ons. Das schließt Probleme in der Schaltung als Fehlerquellen aus. In jedem Fall muss sich der Entwickler einer hardwarenahen Anwendung mit der konkreten Schaltung oder noch besser, mit dem Schaltplan auseinandersetzen.
Komponenten testen
Bevor wir die gesamte Logik des Systems bauen, checken wir erst einmal jede Komponente einzeln. Das sind im ersten Anlauf:
- das LCD
- die LED
- die Hintergrundbeleuchtung
- die UART
- der Taster
- der Lichtsensor
- der Speaker
- die Echtzeituhr
- der Temperatursensor
Stellen Sie zuerst die Hardware zusammen. Legen Sie dann ein neues Projekt „HardwareTest“ an. Wählen Sie das AVR-Vorgehensmodell und legen Sie je Hardwarekomponente ein kleines Programm an, um diese zu testen.
LCD und Beleuchtung testen
Legen Sie ein kleines Programm mit dem Namen „LcdTest“ an. Schreiben Sie den folgenden Quellcode oder kopieren diesen in den Editor. Erstellen (kompilieren, linken) und übertragen (brennen) Sie das Testprogramm. Überprüfen Sie die Funktion der Hardware.
////////////////////////////////////////////////////////// // LCD testen, LCD Add-On an Port D ////////////////////////////////////////////////////////// class Application : public Controller { protected: LcdMK2 lcd; // LCD anlegen public: void onStart() { lcd.init(); // LCD initialisieren lcd.setPos(1,1); // Begrüßung ausgeben lcd.write("Willkommen beim"); lcd.setPos(2,1); lcd.write("kleinen Projekt"); waitMs(5000); // 5 Sekunden warten lcd.clear(); // LCD löschen } public: void onWork() { // leer } } app; //////////////////////////////////////////////////////////
Wenn das LCD korrekt an Port D angeschlossen ist, erscheint nach dem Start des Controllers auf dem Display in der Zeile 1 die Ausgabe „Willkommen beim“ und auf der Zeile 2 die Ausgabe „kleinen Projekt“. Nach 5 Sekunden wird die Ausgabe auf dem Display gelöscht.
Taster, LED und Speaker testen
Legen Sie ein kleines Programm mit dem Namen „SpkTest“ an. Schreiben Sie den folgenden Quellcode oder kopieren diesen in den Editor. Erstellen (kompilieren, linken) und übertragen (brennen) Sie das Testprogramm. Überprüfen Sie die Funktion der Hardware.
////////////////////////////////////////////////////////// // Speaker testen, Speaker an Port B Bit 2 ////////////////////////////////////////////////////////// class Application : public Controller { protected: SoundChanelB speaker; public: void onStart() { speaker.play(FLASHSTR("v d,e,f,g,aa,aa, h,h,h,h,aa,.. h,h,h,h,aa" )); } public: void onWork() { // leer } } app; //////////////////////////////////////////////////////////
Wenn der Speaker korrekt angeschlossen ist, ertönt nach dem Start des Controllers eine kurze Melodie.
Legen Sie ein kleines Programm mit dem Namen „IOTest“ an. Schreiben Sie den folgenden Quellcode oder kopieren diesen in den Editor. Erstellen (kompilieren, linken) und übertragen (brennen) Sie das Testprogramm. Überprüfen Sie die Funktion der Hardware.
////////////////////////////////////////////////////////// // Tatser und LED testen, Taster an B.0, Led an B.3 ////////////////////////////////////////////////////////// class Application : public Controller { protected: Button button1; protected: Led led; public: void onStart() { button1.config(portB,bit0); led.config(portB,bit3); } public: void onWork() { if (button1.isPressed()) led.on(); else led.off(); } } app; //////////////////////////////////////////////////////////
Sind Taster und LED korrekt angeschlossen, lässt sich die LED per Taster ansteuern.
Legen Sie ein kleines Programm mit dem Namen „BKTest“ an. Schreiben Sie den folgenden Quellcode oder kopieren diesen in den Editor. Erstellen (kompilieren, linken) und übertragen (brennen) Sie das Testprogramm. Überprüfen Sie die Funktion der Hardware.
////////////////////////////////////////////////////////// // LCD Hintergrundbeleuchtung testen ////////////////////////////////////////////////////////// class Application : public Controller { protected: Led backLight; public: void onStart() { backLight.config(portB,bit1); } public: void onWork() { backLight.on(); waitMs(2000); backLight.off(); waitMs(2000); } } app; //////////////////////////////////////////////////////////
Ist die Hintergrundbeleuchtung des LCD korrekt angeschlossen, schaltet diese sich zyklisch ein und aus.
Lichtsensor und UART testen
Legen Sie ein kleines Programm mit dem Namen „LichtTest“ an. Schreiben Sie den folgenden Quellcode oder kopieren diesen in den Editor. Erstellen (kompilieren, linken) und übertragen (brennen) Sie das Testprogramm. Überprüfen Sie die Funktion der Hardware.
////////////////////////////////////////////////////////// // Lichtsensor und Uart testen, Lichtsensor an C.0 ////////////////////////////////////////////////////////// class Application : public Controller { protected: Uart konsole; protected: AnalogDevice lichtsensor; public: void onStart() { lichtsensor.config(0); konsole.config(9600); } public: void onWork() { uint8 wert; wert=lichtsensor.getValue8(); konsole.sendByte(wert); waitMs(100); } } app; //////////////////////////////////////////////////////////
Wenn der Lichtsensor und die USBtoUART-Bridge bzw. der mySmartUSB MK2 korrekt angeschlossen sind und die UART Kommunikation richtig konfiguriert ist, können mit dem myAVR Controlcenter die Analogdaten des Lichtsensors empfangen und angezeigt werden.
Temperatursensor testen
Legen Sie ein kleines Programm mit dem Namen „TempTest“ an. Schreiben Sie den folgenden Quellcode oder kopieren diesen in den Editor. Erstellen (kompilieren, linken) und übertragen (brennen) Sie das Testprogramm. Überprüfen Sie die Funktion der Hardware.
////////////////////////////////////////////////////////// // Temperatursensor testen ////////////////////////////////////////////////////////// class Application : public Controller { protected: Uart konsole; protected: I2C_LM75 lm75; protected: String buffer; public: void onStart() { konsole.config(9600); lm75.config(0x90); } public: void onWork() { lm75.formatGradToString(buffer); buffer += "°C\n"; konsole.sendString(buffer); waitMs(1000); } } app; //////////////////////////////////////////////////////////
Echtzeituhr stellen und testen
Legen Sie ein kleines Programm mit dem Namen „ZeitTest“ an. Schreiben Sie den folgenden Quellcode oder kopieren diesen in den Editor. Erstellen (kompilieren, linken) und übertragen (brennen) Sie das Testprogramm. Überprüfen Sie die Funktion der Hardware.
////////////////////////////////////////////////////////// // Echtzeituhr stellen und testen, I²C Adresse 0xD0 ////////////////////////////////////////////////////////// class Application : public Controller { protected: I2C_DS1307 rtc; protected: Uart konsole; protected: String buffer; public: void onStart() { konsole.config(9600); rtc.config(0xD0); rtc.setTime("09:57:00"); } public: void onWork() { rtc.read(); rtc.formatTimeToString(buffer,"%h:%m:%s"); buffer+=" Uhr\n"; konsole.sendString(buffer); waitMs(1000); } } app; //////////////////////////////////////////////////////////
Wenn die Echtzeituhr (10K PullUp am Bus beachten) und die USBtoUART-Bridge bzw. der mySmartUSB MK2 korrekt angeschlossen sind und die UART-Kommunikation richtig konfiguriert ist, wird die Echtzeituhr eingeschaltet und auf die Zeit im Prorgammcode gestellt. Danach wird die Uhrzeit einmal pro Sekunde per UART an den PC gesendet und kann mit dem myAVR Controlcenter verfolgt werden.