Forum: Mikrocontroller und Digitale Elektronik mylcd lib und TG12864B-13


von Alex L. (al2k)


Angehängte Dateien:

Lesenswert?

Hallo an alle,

seit knapp einem Jahr beschäftige ich mich nun mit Mikrocontrollern, ich 
konnte mir durch das Forum viel Geundwissen beibringen und habe auch 
schon einige kleinere und größere Projekte entwickelt. Zb Belichter und 
Ätzanlage mit Steuerung alles in C und mit Atmega8 und zwei Zeilen 
Displays.

Nun ja nun zu meinem eigentlichen Problem, ich baue mir gerade eine 
kleine Wetterstation mit Grafik Display.

Hardware: Atmega 16 mit 16 MHz programmiert mit der neusten Version des 
Armelstudios.

Für mein Grafik Display benutze ich die Mylcd Lib. Hier ist auch mein 
Problem.
Mein Uhr, die ich per lcd_set_cursor(55,7) an eine beliebige Stelle 
schiebe wird doppelt angezeigt. Wenn ich mir nur Text ausgeben lasse, 
außerhalb der while funktioniert das ohne Probleme. Ein Bild wird auch 
richtig dargestellt.

Hier noch meine While Schleife:
1
while(1)
2
    {
3
      
4
               lcd_set_cursor(65,7);             //LCD-Ausgabe: Stunde
5
              leading_0(hh);
6
                 itoa(hh,hh_buffer,10);
7
                 lcd_puts(hh_buffer);
8
               lcd_puts(":");
9
}
10
Return(0);
11
}

Hat hier vielleicht jemand eine Idee warum das so ist und wie ich das 
beheben kann?

An den Timings habe ich schon geschraubt und angeschlossen ist denke ich 
auch alles richtig.

Gruß Alex

: Bearbeitet durch User
von michi (Gast)


Lesenswert?

Weiß leider nicht was hinter der leading() Fkt. steckt aber wird das 
Display auch gelöscht bevor was neues kommt?

von Alex L. (al2k)


Lesenswert?

Hinter der Leading steckt nichts besonderes, er guckt sich die Variablen 
"hh", "mm" und "ss" an, wenn dort ein Wert kleiner 10 drin steht, wird 
vorher der Variable noch eine Null geschrieben, einfach wegen der Optik.

Das Display wird gelöscht. Das funktioniert auch alles wunderbar.
Komisch ist allerdings auch, dass er auf beiden Seiten löscht und auch 
auf beiden Seiten die Uhr hoch zählt, es scheint so, als würde er das 
Display einfach (bis auf das Image) spiegeln.

von dummy (Gast)


Lesenswert?

>es scheint so, als würde er das
>Display einfach (bis auf das Image) spiegeln.

Ich würde sagen das da jemand beide Enable Leitungen
gleichzeitig aktiv schaltet.

von Alex L. (al2k)


Lesenswert?

> Ich würde sagen das da jemand beide Enable Leitungen
> gleichzeitig aktiv schaltet.


Du meinst für Chip 1 und 2?
Hmm das liegt doch dann an der Lib oder?

von dummy (Gast)


Lesenswert?

>Du meinst für Chip 1 und 2?

Ja.

>Hmm das liegt doch dann an der Lib oder?

Vermutlich. Andererseits zeigst du kein vollständiges Programm.
Vieleicht schreibst du ja doch noch irgendwo ein zweites Mal und hast es
nur vergessen.

von Alex L. (al2k)


Lesenswert?

Hier mein kompletter Code (im moment), habe alles soweit abgespeckt, um 
einen Programmierfehler auszuschließen.

Die Zeile löschen, lasse ich in einer anderen Datei, allerdings ist das 
nur ein Fill Rect auf die Koordinaten X65 und Y7
1
#define F_CPU 16000000UL
2
3
#include <avr/io.h>
4
#include <util/delay.h>
5
#include <inttypes.h>
6
#include <avr/pgmspace.h>
7
#include <avr/interrupt.h>
8
#include <stdlib.h>
9
#include <math.h>
10
#include <string.h>
11
#include <stdio.h>
12
13
#include "ks0108.h"
14
#include "arial.h"
15
#include "Bitmap.h"
16
#include "clock.h"
17
18
char itoa_buffer[8];
19
20
void leading_0(uint8_t digit)
21
{
22
  if(digit<=9)
23
  {
24
    lcd_putc(Arial,'0');
25
  }
26
}
27
28
int main(void)
29
{
30
   // Warte auf Display
31
           for(volatile uint16_t i=0; i<15000; i++);
32
    
33
     // LCD
34
           lcd_init();
35
36
   // Lösche Display
37
            lcd_clear();
38
    
39
  // Lade Bild an Position 0,0
40
      LoadBitmap(IMAGE,0,0);
41
    
42
  //Starten der DCF77 Uhr
43
      Start_Clock();
44
    
45
  //Globale Interrupts einschalten
46
      sei();
47
48
while(1)
49
    {
50
              //LCD-Ausgabe: Stunde
51
              lcd_set_cursor(65,7);             
52
              leading_0(hh);
53
              itoa(hh,hh_buffer,10);
54
              lcd_puts(Arial, hh_buffer);
55
              lcd_puts(Arial, ":");
56
}
57
Return(0);
58
}

von Alex L. (al2k)


Lesenswert?

Hallo an alle,

ich habe gerade noch etwas interessantes herausgefunden.
Schreibe ich nur auf CHIP1, wird mir die Uhrzeit nur auf der linken 
Seite ausgegeben und alles ist so, wie es soll.

Erst wenn ich auch auf Chip 2 Schreibe, wird mir alles auf Chip1 
gespiegelt.

Jemand eine Idee?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.