Forum: Mikrocontroller und Digitale Elektronik Uhr mit LCD Display funktioniert nicht


von Simon R. (simon_r44)


Lesenswert?

Hallo,

ich hab dieses Projekt nachgebaut (als Einstieg mit einem LCD Display).

http://www.pro-qwerty.com/lcd_clock.php

Verwendet wird ein HD44780 kompatibles Display.

Ich verwende das TC1602E-01(auch HD44780 kompatibel). Aber es zeigt 
nichts auf dem Display an außer die erste Zeile alles Pixel. Es wird ein 
Quarz 8MHZ verwendet. Ich hab nur ein 10MHZ. Es sollte auch ohne gehen. 
Das zumindest was angezeigt wird.

Oder muss am Quellcode was verändert werden?

von isnah (Gast)


Lesenswert?

Ich nehme an, du hast die Zeile:
$crystal = 8000000
deiner Quarzfrequenz angepassT?

von Simon R. (simon_r44)


Lesenswert?

isnah schrieb:
> Ich nehme an, du hast die Zeile:
> $crystal = 8000000
> deiner Quarzfrequenz angepassT?

Nein das habe ich nicht. Wird höchstwarscheinlich daran liegen. Danke...

von Simon R. (simon_r44)


Lesenswert?

Ich verwende jetzt das 4MHZ Quarz und habe die Zeile geändert nach:

$crystal = 4000000

Jetzt muss ja di e Uhr auch anders takten. Also 1024/2=512



$crystal = 4000000
$baud = 19200

Declare Sub Lover_text()

Config Pind.2 = Input
Config Pind.3 = Input
Config Pind.4 = Input
Config Pind.6 = Output
Portd.2 = 1
Portd.3 = 1
Portd.4 = 1
Portd.6 = 0

Dim A As Integer
Dim Secounds As Byte
Dim Minutes As Byte
Dim Hours As Byte
Let Secounds = 0
Let Minutes = 0
Let Hours = 0
Let A = 0

Config Lcd = 16 * 2
Deflcdchar 0 , 32 , 21 , 14 , 4 , 4 , 10 , 17 , 17          ' replace ? 
with number (0-7)
Deflcdchar 1 , 32 , 4 , 14 , 14 , 14 , 4 , 4 , 4            ' replace ? 
with number (0-7)

Config Timer1 = Timer , Prescale = 1024
On Ovf1 Tim1_isr
Load Timer1 , 7812


Ändere ich jetzt die Zeile
>Config Timer1 = Timer , Prescale = 1024

nach

Config Timer1 = Timer , Prescale = 512

so meldet Bascom den Fehler:

Error 96, Line 33: Prescale value must be 1, 8, 64, 256 or 1024


Also kann ich nur ein 8MHZ, ein 2MHZ usw. verwenden.

Wie kann ich das jetzt umschreiben, sodas ich ein 4MHZ Quarz nehmen 
kann.

Ich hätte auch noch ein 10 und 15MHZ Quarz...

von Retnuoc (Gast)


Lesenswert?

Nein im Code passt du die Frequenz an deinen Quarz an.

Damit die Sekunde wieder eine Sekunde hat musst du das Vorbesetzen des 
Timers ändern auf einen Wert der zu deinem Quarz passt.

...
Tim1_isr:
   Load Timer1 , 7812

...

von J. H. (joho62)


Lesenswert?

Ich (auch Anfänger) habe diese Uhr jetzt nachgebaut. Ich finde das ein 
prima Testprojekt, man kann einiges probieren und lernen. Bei mir läuft 
es auf Mega 8 mit 9.830400 MHz, das teilt sich günstig mit Timer= 9600, 
und die Bauds stimmen auch.
Ich hätte nur gerne die Anzeige so wie bei einer Uhr üblich, d.h. 
rechtsbündig und mit Vornull bei Minute und Sekunde. Ich hab schon 
einiges versucht, aber noch keinen Durchbruch :)
Joachim

von Simon R. (simon_r44)


Lesenswert?

Ja, das eigentliche Problem ist ja auch, das das Display gar nichts 
anzeigt...

Aber es ist ein HD44780 Standartdisplay...

von J. H. (joho62)


Lesenswert?

Also wenn Du garnichts siehst, liegt das nicht an der Quarzfrequenz, 
damit ändert sich nur die Zeit.
Hast Du schon alle Anschlüsse am LCD nachgeprüft?
Kannst Du mit dem Kontrastregler von ganz hell bis zu lauter schwarzen 
Quadraten einstellen?
Hast Du Pin5 (R/W) an GND angeschlossen?
Mehr fällt mir erstmal nicht ein.
Joachim

von Simon R. (simon_r44)


Lesenswert?

J. H. schrieb:
> Hast Du Pin5 (R/W) an GND angeschlossen?

Nein, laut Schaltplan wird Pin 5 nirgends angeschlossen...

von Simon R. (simon_r44)


Lesenswert?

Simon R. schrieb:
> J. H. schrieb:
>> Hast Du Pin5 (R/W) an GND angeschlossen?
>
> Nein, laut Schaltplan wird Pin 5 nirgends angeschlossen...

Okay die Uhr funktioniert jetzt einwandfrei, bis auf das Quarz.

Retnuoc schrieb:
> Nein im Code passt du die Frequenz an deinen Quarz an.
>
> Damit die Sekunde wieder eine Sekunde hat musst du das Vorbesetzen des
> Timers ändern auf einen Wert der zu deinem Quarz passt.
>
> ...
> Tim1_isr:
>    Load Timer1 , 7812
>
> ...

Ich verstehe das nicht ganz. Muss ich die 7812 durch 2 teilen? Ich will 
ein 4MHZ Quarz nutzen...

von isnah (Gast)


Lesenswert?

@ J.H.
Doch die Angabe im Programm:
$crystal = 4000000
ist für die Funktion des Display notwendig. Die Function "waitms 200" im 
Code ist direkt abhängig davon.

von J. H. (joho62)


Angehängte Dateien:

Lesenswert?

Ich habe die Uhr testweise mit Quarzen von 3 bis 20 MHZ betrieben, nach 
dem ändern des Timer-Startwertes ging es immer ohne Fehler.
Die 200ms stellen sich doch durch die Angabe der Frequenz in "$crystal" 
richtig ein(?).
Den Timer-Startwert ermittelt man durch 
=Quarzfrequenz/Prescalewert(1024).
Bloß für mein Problem - die vorlaufenden Nullen - hab ich noch immer 
keine Lösung. Vielleicht weiß einer was.
Ich hab mal meine Version der Uhr angehängt.
Joachim

von Simon R. (simon_r44)


Lesenswert?

J. H. schrieb:
> Den Timer-Startwert ermittelt man durch
> =Quarzfrequenz/Prescalewert(1024).

Das heißt, wenn ich ein 4MHZ Quarz nutzen will, muss ich einfach die 
4000000/1024 machen? Ich hätte dann 3906,25.

Ich schreibe also:

>$crystal = 4000000

>Load Timer1 , 3906

und bei Zeile 80...

Aber was passiert mit den ,25 (3906,25)? Wird die Uhr dann ungenau?
Bei 8MHZ wären ja noch ,5 übrig (7812,5)

von Thomas D. (thomasderbastler)


Lesenswert?

Also bei einem 4MHz sollte so aussehen :


$crystal = 4000000
Config Timer1 = Timer, Prescale = 64

On Timer1 Timer_irq
Const Timervorgabe = 3036

Enable Timer1
Enable Interrupts


Do

Loop

Timer_irq:
  Timer1 = Timervorgabe

von Simon R. (simon_r44)


Lesenswert?

Danke...

Kein Wunder. Nach meinen Angaben lief die Uhr doppelt so schnell...

von Thomas D. (thomasderbastler)


Lesenswert?

und funzt jetzt ?

von Simon R. (simon_r44)


Lesenswert?

Ich hab das jetzt mal so geschrieben:

$crystal = 4000000
$baud = 19200

Declare Sub Lover_text()

Config Pind.2 = Input
Config Pind.3 = Input
Config Pind.4 = Input
Config Pind.6 = Output
Portd.2 = 1
Portd.3 = 1
Portd.4 = 1
Portd.6 = 0

Dim A As Integer
Dim Secounds As Byte
Dim Minutes As Byte
Dim Hours As Byte
Let Secounds = 0
Let Minutes = 0
Let Hours = 0
Let A = 0

Config Lcd = 16 * 2
Deflcdchar 0 , 32 , 21 , 14 , 4 , 4 , 10 , 17 , 17          ' replace ? 
with number (0-7)
Deflcdchar 1 , 32 , 4 , 14 , 14 , 14 , 4 , 4 , 4            ' replace ? 
with number (0-7)

Config Timer1 = Timer , Prescale = 64
On Ovf1 Tim1_isr
Load Timer1 , 3036

Setclock:
Disable Interrupts
Let Secounds = 0
Cls

Cursor On Blink

Lcd "Time: "
Lowerline
Lcd "Set Clock!"
Locate 1 , 9
Lcd ":"
Locate 1 , 12
Lcd "."


Do
  If Pind.3 = 0 Then
      Minutes = Minutes + 1
      If Minutes = 60 Then Minutes = 0
      Waitms 200
   End If
   If Pind.2 = 0 Then
      Hours = Hours + 1
      If Hours = 24 Then Hours = 0
      Waitms 200
   End If
   If Pind.4 = 0 Then Exit Do
   Locate 1 , 7
   Lcd "  "
   Locate 1 , 7
   Lcd Hours
   Locate 1 , 10
   Lcd "  "
   Locate 1 , 10
   Lcd Minutes
   Locate 1 , 13
   Lcd "  "
   Locate 1 , 13
   Lcd Secounds
   Waitms 50
Loop


Enable Timer1
Enable Interrupts

Cursor Off Noblink

Call Lover_text()

Do
  Toggle Portd.6
  Waitms 100
  If Pind.4 = 0 Then
      Waitms 10
      While Pind.4 = 0
         Nop
      Wend
      Goto Setclock
  End If
Loop

Tim1_isr:
   Load Timer1 , 3036

   If Secounds = 60 Then
      Secounds = 0
      Minutes = Minutes + 1
      If Minutes = 60 Then
         Minutes = 0
         Locate 1 , 10
         Lcd "  "
         Hours = Hours + 1
         If Hours = 24 Then
            Hours = 0
            Locate 1 , 7
            Lcd "  "
            Call Lover_text()
            nop
            nop
         End If
      End If
   End If

   Locate 1 , 7
   Lcd Hours
   Locate 1 , 10
   Lcd Minutes
   Locate 1 , 13
   Lcd "  "
   Locate 1 , 13
   Lcd Secounds

   Locate 1 , 16
   If A = 0 Then
      Lcd Chr(0)
      A = 1
   Elseif A = 1 Then
      Lcd Chr(1)
      A = 0
   End If
   Secounds = Secounds + 1
Return

End


Sub Lover_text()
   Locate 2 , 0
   Lcd "   Hello Simon  "
End Sub


Die Uhr läuft zehnmahl so schnell...

von J. H. (joho62)


Angehängte Dateien:

Lesenswert?

Hallo Thomas!
Wie kommst Du auf diese Zahl?
Ich hab das gleich mal ausprobiert, da geht die Post ab! Die Sekunden 
sind garnicht mehr zu sehen, die Minuten laufen fast im Sekundentakt :)
Nach der Formel soll der Timerstartwert 62500 sein. Hab ich 
reingeschrieben, alles wieder OK!

@ Simon:
Glatte Quarzfrequenzen geben meistens ungerade Teilerwerte, ich hab in 
der Kiste einen 9,8304 MHz gefunden, der muß auch in was seriellem drin 
gewesen sein, wegen der Baudrate.
Die Datei mußte ich nochmal überarbeiten, da war ein Fehler drin ;) 
Deshalb nochmal.
Joachim

von Thomas D. (thomasderbastler)


Angehängte Dateien:

Lesenswert?

Ups..was übersehen ?

von Simon R. (simon_r44)


Lesenswert?

@ J. H.

Die Uhr rennt immer noch doppelt so schnell...

von J. H. (joho62)


Lesenswert?

Ich hab das ja umgesetzt auf ATmega8, muß erstmal auf dem Steckbrett was 
mit dem Tiny 2313 zusammenstecken...mal sehen!

von Thomas D. (thomasderbastler)


Lesenswert?

Fuses passen ?

von Simon R. (simon_r44)


Lesenswert?

Thomas der Bastler schrieb:
> Fuses passen ?

Hatte sie ausversehen auf E4 gestellt. Natürlich E2...

Danke euch beiden...

von Simon R. (simon_r44)


Lesenswert?

Also die Uhr will bei mir nicht nach dem "echten" Sekundentakt laufen. 
Der Attiny2313 hat doch ein interner 8MHZ oszillator. Kann man den nicht 
nehmen?

von Thomas D. (thomasderbastler)


Lesenswert?

Simon R. schrieb:
> Also die Uhr will bei mir nicht nach dem "echten" Sekundentakt
> laufen.
> Der Attiny2313 hat doch ein interner 8MHZ oszillator. Kann man den nicht
> nehmen?

Schon aber ungenauer wie ein Quarz.
Was ist das Problem noch ?

von Eumel (Gast)


Lesenswert?

Simon R. schrieb:
> Kann man den nicht
> nehmen?

Dann schau dir mal die Abeweichungen im Datenblatt an.

von Thomas D. (thomasderbastler)


Lesenswert?

Eumel schrieb:
> Dann schau dir mal die Abeweichungen im Datenblatt an.

Der interner Osc ist ein RC Glied...wird nie so genau laufen wie ein 
Quarz

von Simon R. (simon_r44)


Lesenswert?

Thomas der Bastler schrieb:
> Schon aber ungenauer wie ein Quarz.
> Was ist das Problem noch ?

Die gebaute Uhr mit 4MHZ Quarz läuft schneller:

Stoppuhr= 16:10

Gebaute Uhr= 16:25

von Eumel (Gast)


Lesenswert?

Thomas der Bastler schrieb:
> Der interner Osc ist ein RC Glied...wird nie so genau laufen wie ein
> Quarz

Bezug zu meiner Aussage? Null.

von Thomas D. (thomasderbastler)


Lesenswert?

Hast jetzt ein Atmega8 mit 4 MHz ?

von Simon R. (simon_r44)


Lesenswert?

Thomas der Bastler schrieb:
> Hast jetzt ein Atmega8 mit 4 MHz ?

Nein, den ATtiny2313...

von Thomas D. (thomasderbastler)


Lesenswert?

Hast die beiden Zeilen auch drin ?

Enalbe Timer1
Enable interrupts

Zeige mal den Code

von Simon R. (simon_r44)


Lesenswert?

Das wäre der Code:

   '  - -  -   - - - - - - - - - - - - - - - - - - - - - - - - - - -
'Made by Szymon Dyja
'from www.pro-qwerty.com
''  - -  -   - - - - - - - - - - - - - - - - - - - - - - - - - -

$crystal = 4000000
$baud = 19200

Declare Sub Lover_text()

Config Pind.2 = Input
Config Pind.3 = Input
Config Pind.4 = Input
Config Pind.6 = Output
Portd.2 = 1
Portd.3 = 1
Portd.4 = 1
Portd.6 = 0

Dim A As Integer
Dim Secounds As Byte
Dim Minutes As Byte
Dim Hours As Byte
Let Secounds = 0
Let Minutes = 0
Let Hours = 0
Let A = 0

Config Lcd = 16 * 2
Deflcdchar 0 , 32 , 21 , 14 , 4 , 4 , 10 , 17 , 17          ' replace ? 
with number (0-7)
Deflcdchar 1 , 32 , 4 , 14 , 14 , 14 , 4 , 4 , 4            ' replace ? 
with number (0-7)

Config Timer1 = Timer , Prescale = 64
On Ovf1 Tim1_isr
Load Timer1 , 62500

Setclock:
Disable Interrupts
Let Secounds = 0
Cls

Cursor On Blink

Lcd "Time: "
Lowerline
Lcd "Set Clock!"
Locate 1 , 9
Lcd ":"
Locate 1 , 12
Lcd "."


Do
  If Pind.3 = 0 Then
      Minutes = Minutes + 1
      If Minutes = 60 Then Minutes = 0
      Waitms 200
   End If
   If Pind.2 = 0 Then
      Hours = Hours + 1
      If Hours = 24 Then Hours = 0
      Waitms 200
   End If
   If Pind.4 = 0 Then Exit Do
   Locate 1 , 7
   Lcd "  "
   Locate 1 , 7
   Lcd Hours
   Locate 1 , 10
   Lcd "  "
   Locate 1 , 10
   Lcd Minutes
   Locate 1 , 13
   Lcd "  "
   Locate 1 , 13
   Lcd Secounds
   Waitms 50
Loop


Enable Timer1
Enable Interrupts

Cursor Off Noblink

Call Lover_text()

Do
  Toggle Portd.6
  Waitms 100
  If Pind.4 = 0 Then
      Waitms 10
      While Pind.4 = 0
         Nop
      Wend
      Goto Setclock
  End If
Loop

Tim1_isr:
   Load Timer1 , 62500

   If Secounds = 60 Then
      Secounds = 0
      Minutes = Minutes + 1
      If Minutes = 60 Then
         Minutes = 0
         Locate 1 , 10
         Lcd "  "
         Hours = Hours + 1
         If Hours = 24 Then
            Hours = 0
            Locate 1 , 7
            Lcd "  "
            Call Lover_text()
            nop
            nop
         End If
      End If
   End If

   Locate 1 , 7
   Lcd Hours
   Locate 1 , 10
   Lcd Minutes
   Locate 1 , 13
   Lcd "  "
   Locate 1 , 13
   Lcd Secounds

   Locate 1 , 16
   If A = 0 Then
      Lcd Chr(0)
      A = 1
   Elseif A = 1 Then
      Lcd Chr(1)
      A = 0
   End If
   Secounds = Secounds + 1
Return

End


Sub Lover_text()
   Locate 2 , 0
   Lcd "   Hello Simon  "
End Sub

von Simon R. (simon_r44)


Lesenswert?

Also den Text einfach unter

>Load Timer1 , 62500

setzen?

von Thomas D. (thomasderbastler)


Lesenswert?

Wo ist der AVR Definition ?

Schreibe mal so :


$regfile = "2313def.dat"
$crystal = 4000000
$baud = 19200
$hwstack = 32
$swstack = 10
$framesize = 40


Config Timer1 = Timer , Prescale = 64
On Timer1 Tim1_isr

do

Loop



Tim1_isr:
Incr Count
Timer1 = 3036
Return

von Simon R. (simon_r44)


Angehängte Dateien:

Lesenswert?

Wenn ich also schreibe:

    '  - -  -   - - - - - - - - - - - - - - - - - - - - - - - - - - 
-
'Made by Szymon Dyja
'from www.pro-qwerty.com
''  - -  -   - - - - - - - - - - - - - - - - - - - - - - - - - -
$regfile = "2313def.dat"
$crystal = 4000000
$baud = 19200
$hwstack = 32
$swstack = 10
$framesize = 40

Declare Sub Lover_text()

Config Pind.2 = Input
Config Pind.3 = Input
Config Pind.4 = Input
Config Pind.6 = Output
Portd.2 = 1
Portd.3 = 1
Portd.4 = 1
Portd.6 = 0

Dim A As Integer
Dim Secounds As Byte
Dim Minutes As Byte
Dim Hours As Byte
Let Secounds = 0
Let Minutes = 0
Let Hours = 0
Let A = 0

Config Lcd = 16 * 2
Deflcdchar 0 , 32 , 21 , 14 , 4 , 4 , 10 , 17 , 17          ' replace ? 
with number (0-7)
Deflcdchar 1 , 32 , 4 , 14 , 14 , 14 , 4 , 4 , 4            ' replace ? 
with number (0-7)

Config Timer1 = Timer , Prescale = 64
On Timer1 Tim1_isr

do

Loop



Tim1_isr:
Incr Count
Timer1 = 3036
Return



Setclock:
Disable Interrupts
Let Secounds = 0
Cls

Cursor On Blink

Lcd "Time: "
Lowerline
Lcd "Set Clock!"
Locate 1 , 9
Lcd ":"
Locate 1 , 12
Lcd "."


Do
  If Pind.3 = 0 Then
      Minutes = Minutes + 1
      If Minutes = 60 Then Minutes = 0
      Waitms 200
   End If
   If Pind.2 = 0 Then
      Hours = Hours + 1
      If Hours = 24 Then Hours = 0
      Waitms 200
   End If
   If Pind.4 = 0 Then Exit Do
   Locate 1 , 7
   Lcd "  "
   Locate 1 , 7
   Lcd Hours
   Locate 1 , 10
   Lcd "  "
   Locate 1 , 10
   Lcd Minutes
   Locate 1 , 13
   Lcd "  "
   Locate 1 , 13
   Lcd Secounds
   Waitms 50
Loop


Enable Timer1
Enable Interrupts

Cursor Off Noblink

Call Lover_text()

Do
  Toggle Portd.6
  Waitms 100
  If Pind.4 = 0 Then
      Waitms 10
      While Pind.4 = 0
         Nop
      Wend
      Goto Setclock
  End If
Loop

Tim1_isr:
   Load Timer1 , 3036

   If Secounds = 60 Then
      Secounds = 0
      Minutes = Minutes + 1
      If Minutes = 60 Then
         Minutes = 0
         Locate 1 , 10
         Lcd "  "
         Hours = Hours + 1
         If Hours = 24 Then
            Hours = 0
            Locate 1 , 7
            Lcd "  "
            Call Lover_text()
            nop
            nop
         End If
      End If
   End If

   Locate 1 , 7
   Lcd Hours
   Locate 1 , 10
   Lcd Minutes
   Locate 1 , 13
   Lcd "  "
   Locate 1 , 13
   Lcd Secounds

   Locate 1 , 16
   If A = 0 Then
      Lcd Chr(0)
      A = 1
   Elseif A = 1 Then
      Lcd Chr(1)
      A = 0
   End If
   Secounds = Secounds + 1
Return

End


Sub Lover_text()
   Locate 2 , 0
   Lcd "   Hello Simon  "
End Sub




Meldet er Fehler siehe Bild......

von holger (Gast)


Lesenswert?

>Meldet er Fehler siehe Bild......


Dann mach doch diesen Unsinn da weg:

Tim1_isr:
Incr Count
Timer1 = 3036
Return

Was willst du damit? Jetzt hast du Tim1_isr: doppelt im Code.

von Thomas D. (thomasderbastler)


Lesenswert?

Do - Loop 2 mal im Code

Count nicht deklariert...

von Thomas D. (thomasderbastler)


Angehängte Dateien:

Lesenswert?

Schaue mal jetzt..aber bitte nich "aufräumen"

Interne Pullups einschalten..usww

von Simon R. (simon_r44)


Lesenswert?

Ich habe jetzt geschrieben:
1
    ' * - - * - * * - - - - - - - - - - - - - - - - - - - - - - - - - - -
2
'Made by Szymon Dyja
3
'from www.pro-qwerty.com
4
'' * - - * - * * - - - - - - - - - - - - - - - - - - - - - - - - - -
5
$regfile = "2313def.dat"
6
$crystal = 4000000
7
$baud = 19200
8
$hwstack = 32
9
$swstack = 10
10
$framesize = 40
11
12
13
Declare Sub Lover_text()
14
15
Config Pind.2 = Input
16
Config Pind.3 = Input
17
Config Pind.4 = Input
18
Config Pind.6 = Output
19
Portd.2 = 1
20
Portd.3 = 1
21
Portd.4 = 1
22
Portd.6 = 0
23
24
Dim A As Integer
25
Dim Secounds As Byte
26
Dim Minutes As Byte
27
Dim Hours As Byte
28
Let Secounds = 0
29
Let Minutes = 0
30
Let Hours = 0
31
Let A = 0
32
33
Config Lcd = 16 * 2
34
Deflcdchar 0 , 32 , 21 , 14 , 4 , 4 , 10 , 17 , 17          ' replace ? with number (0-7)
35
Deflcdchar 1 , 32 , 4 , 14 , 14 , 14 , 4 , 4 , 4            ' replace ? with number (0-7)
36
37
Config Timer1 = Timer , Prescale = 64
38
On Timer1 Tim1_isr
39
40
do
41
42
Loop
43
44
45
Setclock:
46
Disable Interrupts
47
Let Secounds = 0
48
Cls
49
50
Cursor On Blink
51
52
Lcd "Time: "
53
Lowerline
54
Lcd "Set Clock!"
55
Locate 1 , 9
56
Lcd ":"
57
Locate 1 , 12
58
Lcd "."
59
60
61
Do
62
  If Pind.3 = 0 Then
63
      Minutes = Minutes + 1
64
      If Minutes = 60 Then Minutes = 0
65
      Waitms 200
66
   End If
67
   If Pind.2 = 0 Then
68
      Hours = Hours + 1
69
      If Hours = 24 Then Hours = 0
70
      Waitms 200
71
   End If
72
   If Pind.4 = 0 Then Exit Do
73
   Locate 1 , 7
74
   Lcd "  "
75
   Locate 1 , 7
76
   Lcd Hours
77
   Locate 1 , 10
78
   Lcd "  "
79
   Locate 1 , 10
80
   Lcd Minutes
81
   Locate 1 , 13
82
   Lcd "  "
83
   Locate 1 , 13
84
   Lcd Secounds
85
   Waitms 50
86
Loop
87
88
89
Enable Timer1
90
Enable Interrupts
91
92
Cursor Off Noblink
93
94
Call Lover_text()
95
96
Do
97
  Toggle Portd.6
98
  Waitms 100
99
  If Pind.4 = 0 Then
100
      Waitms 10
101
      While Pind.4 = 0
102
         Nop
103
      Wend
104
      Goto Setclock
105
  End If
106
Loop
107
108
Tim1_isr:
109
   Load Timer1 , 3036
110
111
   If Secounds = 60 Then
112
      Secounds = 0
113
      Minutes = Minutes + 1
114
      If Minutes = 60 Then
115
         Minutes = 0
116
         Locate 1 , 10
117
         Lcd "  "
118
         Hours = Hours + 1
119
         If Hours = 24 Then
120
            Hours = 0
121
            Locate 1 , 7
122
            Lcd "  "
123
            Call Lover_text()
124
            nop
125
            nop
126
         End If
127
      End If
128
   End If
129
130
   Locate 1 , 7
131
   Lcd Hours
132
   Locate 1 , 10
133
   Lcd Minutes
134
   Locate 1 , 13
135
   Lcd "  "
136
   Locate 1 , 13
137
   Lcd Secounds
138
139
   Locate 1 , 16
140
   If A = 0 Then
141
      Lcd Chr(0)
142
      A = 1
143
   Elseif A = 1 Then
144
      Lcd Chr(1)
145
      A = 0
146
   End If
147
   Secounds = Secounds + 1
148
Return
149
150
End
151
152
153
Sub Lover_text()
154
   Locate 2 , 0
155
   Lcd "   Hello Simon  "
156
End Sub

Das Display zeigt nur ein komisches Zeichen an...

von Thomas D. (thomasderbastler)


Lesenswert?

Wo ist denn die Definition im Code, daß Du ein Display hast ?

Sehe nirgends...

von Simon R. (simon_r44)


Lesenswert?

Thomas der Bastler schrieb:
> Wo ist denn die Definition im Code, daß Du ein Display hast ?
>
> Sehe nirgends...

Ich habe jetzt dein Programm genommen. Die Uhr läufz noch schneller 
sodass ich ich die sekunden nicht mehr sehe.

Low Fuse auf E2...

von Thomas D. (thomasderbastler)


Lesenswert?

Irgendwas ist noch faul..sollte aber der code stimmen..weiß nicht was 
ist E2 ..


Das was Du vor hast ist zimelich standard..mit Attiny2313 1 sek, Takt 
erzeugen..erster treffer

http://bascom-forum.de/showthread.php?2753-Attiny2313-mit-1-Sec-Timer

von Zeitmaschine (Gast)


Lesenswert?

Zeig mal ein Foto des Aufbaus. Quarz mit Kondensatoren usw.

von Thomas D. (thomasderbastler)


Lesenswert?

Zeitmaschine schrieb:
> Zeig mal ein Foto des Aufbaus. Quarz mit Kondensatoren usw.

Damit nicht ein so schwerer Geburt wird, auch Dein Code was geflasht 
hast..

von Simon R. (simon_r44)



Lesenswert?

Thomas der Bastler schrieb:
> Damit nicht ein so schwerer Geburt wird, auch Dein Code was geflasht
> hast.

Ich habe deine Code geflasht:
>Forum.bas

von Thomas D. (thomasderbastler)


Lesenswert?

Nun mal auf die schnelle...

In meinem Code, war nur ein GROBE Beispiel, sind die LCD Pins garnicht 
deklariert gewesen.

Bist Sicher, daß Dein Quarz 4 MHz hat ...

von Simon R. (simon_r44)


Lesenswert?

Thomas der Bastler schrieb:
> Bist Sicher, daß Dein Quarz 4 MHz hat ...

Ja es ist das hier:
http://such002.reichelt.de/index.html?ACTION=3;ARTICLE=2449;SEARCH=4,0000-HC18


Mit Load Timer 62500 lief sie noch fast normal vo der geschwindigkeit.

Ich hab auch noch ein Phillips rumliegen...

von Thomas D. (thomasderbastler)


Lesenswert?

Hmmm..stehe momentan echt auf dem Schlauch...Muss mal genau 
anschauen..komme grade nicht drauf..

von Simon R. (simon_r44)


Lesenswert?

Simon R. schrieb:
> Ich hab auch noch ein Phillips rumliegen...

Ob ich nun das Phillips (4000.000) Quarz oder das Standart Quarz (40000) 
nutze ist völlig egal. Die Zeit stimmt bei beiden nicht. Sie laäuft 
immer ein wenig schneller als die "normale" Uhr.

Ich hätte noch ein 10, 12, 15 oder ein 27MHZ Quarz zur Auswahl...

von J. H. (joho62)


Angehängte Dateien:

Lesenswert?

Ich habe jetzt das ganze auf dem Steckbrett mit nem Tiny 2313 aufgebaut. 
Das läuft tadellos mit dem angehängten Programm. Ich habe aber die 
interne Taktquelle benutzt.
Getestet mit 1MHz, 4MHz und 8MHz. Das Programm habe ich etwas 
"verschlankt", und angehängt.
Wenn Du keinen groben Fehler beim Aufbau hast, müßte es auch bei Dir 
laufen.
Ich hatte zunächst Probleme mit dem LCD, weil die Leitungen doch 
ziemlich lang sind. Probiers aus!
Joachim

Edit: Deine Quarze sind alle nicht gut, weil sich immer was hinter dem 
Komma ergibt. Da ist die Abweichung schon absehbar.

von Simon R. (simon_r44)


Lesenswert?

@ J. H.
Mit deinem Code rennt meine Uhr so langsam wie nie. Die Low Fuse steht 
auf 0xE2. Also für 4MHZ. Es funktioniert nur mit dem Load Timer 62500, 
aber jedoch ungenau...

von J. H. (joho62)


Lesenswert?

Also hast Du doch nicht alles so gemacht wie ich.
Du hast den Prescaler auf 64, dazu gehört der Startwert 62500.
Das geht auch, habs eben probiert. Du hast aber jetzt einen sehr hohen 
Startwert, was Dir die Möglichkeit gibt, sehr fein die genaue Zeit 
einzustellen. Das müßte (Mit Quarz!) ziemlich genau werden! Ich versuch 
das mal. Einfach den Startwert etwas erhöhen/vermindern.

von J. H. (joho62)


Lesenswert?

Eben getestet:
Bei Startwert 65000 (+ 2500) läuft sie pro Minute ca. 4 Sekunden 
langsamer. Müßte also sehr fein regelbar sein.

von Karl H. (kbuchegg)


Lesenswert?

Simon R. schrieb:
> @ J. H.
> Mit deinem Code rennt meine Uhr so langsam wie nie. Die Low Fuse steht
> auf 0xE2. Also für 4MHZ.

E2 ist interner Oszillator

> aber jedoch ungenau...

Logisch ist der ungenau. Deswegen benutzt man ja Quarze.

http://www.engbedded.com/fusecalc/

von Karl H. (kbuchegg)


Lesenswert?

Simon R. schrieb:
> Ich habe jetzt geschrieben:
>     '  - -  -   - - - - - - - - - - - - - - - - - - - - - - - - - -
> -
> 'Made by Szymon Dyja
> 'from www.pro-qwerty.com
> ''  - -  -   - - - - - - - - - - - - - - - - - - - - - - - - - -
> $regfile = "2313def.dat"

Was immer das auch für ein Device ist.
Das Regfile für einen Tiny 2313 heisst

$regfile = "attiny2313.dat"

von Simon R. (simon_r44)


Lesenswert?

Karl Heinz Buchegger schrieb:
> E2 ist interner Oszillator
>
>> aber jedoch ungenau...
>
> Logisch ist der ungenau. Deswegen benutzt man ja Quarze.

Okay, das heißt ich muss beim flashen E2 nicht wählen.
Aber wieso läuft die Uhr immmer weiter auch wenn ich kein Quarz an den 
Tiny stecke. Mir kommt es so vor, als ob immer noch der interen 
Oszillator verwendet wird. Die Uhr müsste doch anhalten...

von Karl H. (kbuchegg)


Lesenswert?

Simon R. schrieb:
> Karl Heinz Buchegger schrieb:
>> E2 ist interner Oszillator
>>
>>> aber jedoch ungenau...
>>
>> Logisch ist der ungenau. Deswegen benutzt man ja Quarze.
>
> Okay, das heißt ich muss beim flashen E2 nicht wählen.
> Aber wieso läuft die Uhr immmer weiter auch wenn ich kein Quarz an den
> Tiny stecke. Mir kommt es so vor, als ob immer noch der interen
> Oszillator verwendet wird. Die Uhr müsste doch anhalten...

welchen Teil von
"E2 ist der interne Oszillator"
hast du nicht verstanden?

interner Oszillator heißt 'Dein Quarz ist schmückendes Beiwerk, wird 
aber nicht benutzt'.
Und damit kannst du den selbstverständlich abziehen oder anstecken, wie 
du lustig bist. Nicht benutzt ist nicht benutzt und hat auch keine 
Auswirkungen.

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.