====== 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 + - --> Unterschied vs "lib.h" - Durchsicht der lcd_lib_de.h - F_CPU - --> 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 + - 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) - 18,432 MHz eingeben! - 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 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<