Hallo zusammen,
ich habe mir mein Pollin-Board nach
Gerolds Methode umgebaut und so den Quarz für den m8-Sockel (und auch gleich den für den t2313) ersetzbar gemacht. Jetzt wollte ich einen Uhrenquarz anschließen, aber die Uhr geht (praktisch) nicht :/
Ich hänge mal den Code rein:
' Pin Confuguration ATmega8
' +----------+
' (RESET) PC6 |1 28| PC5 (ADC5/SCL)
' (RXD) PD0 |2 27| PC4 (ADC4/SDA)
' (TXD) PD1 |3 26| PC3 (ADC3)
' (INT0) PD2 |4 25| PC2 (ADC2)
' (INT1) PD3 |5 24| PC1 (ADC1)
' (XCK/T0) PD4 |6 23| PC0 (ADC0)
' VCC |7 22| GND
' GND |8 21| AREF
' (XTAL1/TOSC1) PB6 |9 20| AVCC
' (XTAL2/TOSC2) PB7 |10 19| PB5 (SCK)
' (T1) PD5 |11 18| PB4 (MISO)
' (AIN0) PD6 |12 17| PB3 (MOSI/OC2)
' (AIN1) PD7 |13 16| PB2 (SS/OC1 B)
' (ICP1) PB0 |14 15| PB1 (OC1A)
' +----------+
'======================================================
'System-Einstellungen
'======================================================
'Definition für ATmega8
$regfile ="m8def.dat"
$crystal =1000000
$hwstack =32
$swstack =8
$framesize=24
$Baud =4800 'Baudrate für UART
'======================================================
' Comparator ausschalten (Strom sparen)
config ACI=OFF
'======================================================
'The Port Data Direction Register
' Alles Eingang, was nicht Ausgang sein soll. Spart Strom.
' 76543210
DDRB = &B11111111 'DATA DIRECTION definieren der verwendeten Ports (1 = ausgang; 0= eingang)
PortB = &B00000000 'pullup (0= low level; 1= high level)
' 76543210
DDRC = &B00111111 'DATA DIRECTION definieren der verwendeten Ports (1 = ausgang; 0= eingang)
PortC = &B11000000 'pullup (0= low level; 1= high level)
' 76543210
DDRD = &B11100011 'DATA DIRECTION definieren der verwendeten Ports (1 = ausgang; 0= eingang)
PortD = &B00000000 'pullup (0= low level; 1= high level)
' Für Hintergrundbeleuchtung
config Timer1=PWM, prescale=1, Compare A PWM=clear down
PWM1A=255 ' Licht an!
'**************************************
'********* LCD-Konfiguration **********
'**************************************
LCD_DB4 alias PortC.4 ' gejumpert
LCD_DB5 alias PortC.5 ' gejumpert
LCD_DB6 alias PortC.0 ' Verbindung gezogen
LCD_DB7 alias PortC.1 ' Verbindung gezogen
LCD_E alias PortC.2 ' Verbindung gezogen
LCD_RW alias PortC.3 ' Verbindung gezogen
LCD_RS alias PortB.0 ' gejumpert
' LCD als 16x2 Zeichen konfigurieren
config LCD = 16 * 2
' LCD-Pins konfigurieren
config LCDPIN = Pin , DB4 = LCD_DB4 , DB5 = LCD_DB5 , DB6 = LCD_DB6 , DB7 = LCD_DB7 , E = LCD_E , RS = LCD_RS
' LCD wird im 4-Bit-Modus betrieben
config LCDBUS = 4
Cursor off noblink
InitLCD ' LCD ein
cls ' LCD Display löschen
'======================================================
'simple Uhr
Config Clock=Soft
Time$="12:34:56" ' Voreinstellung
ASSR.AS2=1
' Hauptprogramm:
enable interrupts
do
locate 2, 1 ' LCD-Zeile 1
LCD time$
'wait 1
loop
end
Jetzt kommt's:
Wenn ich
locate 2, 1 ' LCD-Zeile 1
LCD time$
'wait 1 <---- auskommentiert!
verwende und damit in jeder Schleife time$ ausgebe, geht die Uhr (annähernd im Sekundentakt), und ich bekomme ein mehr oder weniger gutes Signal vom Quarz am Oszi. Wenn ich aber das
wait=1 einbinde (oder anderen Code ausführen lasse, der Warteschleifen beinhaltet), geht sie praktisch nicht mehr :/ Am Oszi sehe ich nur im Sekundentakt (sic!) ein wenig Quarzoszillieren. Das summiert sich nach vielen Minuten mal zu einer Sekunde...
Kapazitäten sind, weg, Quarz funktioniert - nur nicht immer! hab' ich was übersehen?
Cheers
Christoph