mylcd lib und TG12864B-13

#3911485
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
Angehängte Dateien:
#3911721
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.
Gast #3912011
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.
#3912048
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
}
#3912760
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren