Skript
Bildschirmlupe an!
SW2 Hello Display World - fast Counter
Wdh. Hello Blinking World:
DDRx, PORTx, _Delay_ms() --> R steht fast immer für Register
--> einmal kompilieren und in Simulide aufbauen
Welche „Vorgaben für die SW-Entwicklung“ wurden verletzt? --> Keine magic numbers, sondern #defines !
siehe Weiterführende Fragen und Infos
Heute „Hello World“ in echt! Timer + Displayausgabe
„Kapitel 2 Sound und Timer bitte nachträglich anschauen“
Frage an Studis „Wer weiß nicht was PWM ist?“
In MC Studio
neues Projekt „02_timer“
jetzt neu: mit Display!
--> Bibliothek aus wiki herunterladen!
Project --> Add --> existing Item (NICHT drag & drop)
bei mir --> F2 Namen ändern auf „lcd_lib_de.h“
Split Screen
Was tun, um Lib in main einzufügen?
#include!
#inc + <Tab>
--> Unterschied <lib.h> vs „lib.h“
Durchsicht der lcd_lib_de.h
-
-->
CPU Frequenz, wichting für genaues Timing der delays
hier 18,432
MHz --> Minimexle Frequenz
Warum 18,432?
ILIAS --> Elektronik Labor --> MiniMEXLE Schaltbild
„Schreck!“ sowiel Krams auf dem Schaltplan!
Wo ist der Quarz? Quarz schwingt mechanisch im E-Feld --> Schaut im Bild aus wie ein Kondensator
defines --> keine Magic numbers
Funktionsprotoypen --> bitte immer am anfan angeben --> gut für eine Übersicht
als erstes immer Initialisierung (anlegen der Variablen, verschiedene Konfigurationen etc.)
lcd_i + <tab>
schon mal kompilieren (immer mal kompilieren zum test, ob noch alles klappt)
noch nicht lauffähig, da nichts angezeigt !
einen String ausgeben!
welche Unterfunktion wohl geeignet?
Hinweis auf Inkonsistenz bei Namensgebung
Eingabe lcd_displayMessage(„Hallo!“, 0,0 ) --> Hinweis auf Zählanfang 0 nicht 1!
Flashen auf Minimexle
Add Target --> STK500 --> ersten COM Port auswählen (und - falls es nicht passt - den nächsten)
Tools --> Device Programming
Apply --> Device Signature sichtbar?
--> Memories --> Program
Ausgabe von „Hallo! Zähler: “
kann „ä“ nicht schreiben , sondern schreibt „µ“, warum?
--> Datasheet lesen!
Am besten in der Schaltung den Namen suchen
Googeln nach DEM16216 Datasheet --> Datenblatt etwas kurz? Blockdiagramm (immer schön Bilder in eigene Dokus machen!) --> ST7066U!
Googeln nach ST7066U Datasheet
Kurzes darüberscrollen über das Datasheet
--> Character code Table! --> ist da „ä“ drin? In einer schon… In der anderen is „µ“ beim gleichen Bitmuster
Also: was tun? entweder „á“ nutzen, oder ldc_putc(11100001); --> was wurde vergessen? --> % !
Vergleich in Simulide:
Aufbau der Schaltung: mega88 + Hd44780 (ist kompatibel zu ST7066U)
Wie verbinden? Siehe lib (wenn gut beschrieben) oder MEXLE Schaltung
In lib: Port-Bits. PIN_EN, PIN_RS --> wo in Simulide?
Für was steht EN? --> Enable. RS --> Register Select
PORT_DATA: von PORTC nur die ersten 4 bits (0…3)
-
hex file Flashen
--> animation einschalten (High/Low wird angezeigt)
es wird noch nichts ausgegeben?? --> im Code schauen oder im Schaltplan!
PC0 auf D4, PC1 auf D5, PC2 auf D6, PC3 auf D7
jetzt klappts , aber ä an falscher Position
lcd_gotoxy einfügen
In Simulide autoload einschalten!
Jetzt: aufsteigende Zahlen ausgeben
Was tun?
Laufvariable anlegen und nutzen: uint8_t i=0; und i++ in der Schleife
wie gibt man Zahlen aus? sprintf? (kann in String einen Zahlenwert ausgeben)
sprintf(output_str, „i:%03u“, i); 3 --> drei Stellen, u --> unsigned
output_str deklarieren
kompilieren --> #include <stdio.h> vergessen
Simulation herunterdrehen
aktuell zählt er nicht so schnell wie die CPU kann, sondern so schnell wie er es ausgeben kann.
Die CPU kann aber schneller!
Blick ins Datenblatt des atmega88
Blockbild
T/C im Inhaltsverzeichnis --> 16 bit Timer/Counter
wichtig sind immer die Register
TCNTn --> timer Counter ; für was steht n? in Mathe?
OCRnA --> Output Compare
TCCRnA
sprintf(output_str, „TC:%03u“, TCNT1); --> an zweiter Pos ausgeben. --> wichtig: 3 in 5 ändern!
kommt noch nix heraus!
Control logic --> steht im folgenden in der Register Description
Blick in die Tabellen, was bei initialisierung mit 0 passiert
--> CS auf 000 hat keine Clock!
also CS10 setzen für schnellsten Zähler
TCCR1B |= 1«CS10;