Bascom- AVR-Microcontroller-Forum
 
*
Willkommen Gast. Bitte einloggen oder registrieren.
Haben Sie Ihre Aktivierungs E-Mail übersehen?
04. September 2010, 04:49:54


Einloggen mit Benutzername, Passwort und Sitzungslänge


Seiten: [1]   Nach unten
  Drucken  
Autor Thema: Soft-Clock - aber wie?  (Gelesen 1330 mal)
0 Mitglieder und 1 Gast betrachten dieses Thema.
chw9999
Ich habe fuer das Forum gespendet.
Bytequäler
*
Online Online

Geschlecht: Männlich
Beiträge: 148



« am: 22. April 2009, 21:42:09 »

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:
Code:
' 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
Gespeichert
uwe.z
Ich habe fuer das Forum gespendet.
Longposter
*
Online Online

Geschlecht: Männlich
Beiträge: 1225



« Antworten #1 am: 22. April 2009, 22:26:17 »

Hi,

Sehe ich das Richtig, den Quarz an B6 und B7, ok aber warum $crystal  =1000000 du hast doch nur 32KHZ,
oder versehe ich das was nicht 
Quarz ohne Kondensatoren habe ich noch nie zu laufen gebracht.
15-33 pF müssen von jedem Pin nach Masse.
Und was ist mit deinen Fusebits für den M8
Hast du ihm gesagt, das du einen Quarz dran hast!

Gruß

Uwe
Gespeichert

Wer Barfuss im Wald läuft hat schneller eine Tannennadel im Fuss stecken!
BehindBlueEyes
Longposter
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 580


« Antworten #2 am: 22. April 2009, 22:49:29 »

Sehe ich das Richtig, den Quarz an B6 und B7, ok aber warum $crystal  =1000000 du hast doch nur 32KHZ,
Ich denke, er hat den internen RC Oscillator auf 1MHz gestellt.

Quarz ohne Kondensatoren habe ich noch nie zu laufen gebracht.
15-33 pF müssen von jedem Pin nach Masse.
Oder du schaltest die internen Caps über die CKOPT Fuse zu

Und was ist mit deinen Fusebits für den M8
Hast du ihm gesagt, das du einen Quarz dran hast!
Nicht über die Fuse, sondern über ASSR.AS2=1. Genau das hat er in seinem Code.

BEye
Gespeichert
chw9999
Ich habe fuer das Forum gespendet.
Bytequäler
*
Online Online

Geschlecht: Männlich
Beiträge: 148



« Antworten #3 am: 22. April 2009, 22:51:06 »

Hallo Uwe,

nene, das passt schon Smiley

Der Uhrenquarz verhält sich etwas anderes als normale Quarze. Er arbeitet PARALLEL zum internen Oszillator mit 1 MHz (die Fusebits sind jungfräulich). Mit knapp 32.000 (nicht 32.000.000 oder den üblichen 8.000.000!) Takten pro Sekunde wäre er auch seeehr langsam.

Mit guten Augen kannst Du das wesentliche hier lesen - oder angenehmer im Buch, falls vorhanden Cool
http://www.rowalt.de/mc/avr/AvrbuchOnline/AvrLehrbuch111_909.htm


Das "Problem" liegt ja darin: Mit "ohne Wait" schwingt der Quarz, mit Wait geht nix... irgendwo stört da bestimmt irgendetwas...

Cheers
Christoph
Gespeichert
StevieL
Bytequäler
***
Offline Offline

Geschlecht: Männlich
Beiträge: 199



« Antworten #4 am: 23. April 2009, 06:43:52 »

Hallo Christoph

hast du dir im Zusammenhang mit Config Clock mal die Option "Gosub Sectic" angeschaut? Damit kannst du in einer ISR z. B. einmal pro Sekunde das LCD ansteuern, unabhängig von der Hauptschleife und ohne Wait.
ASSR.AS2=1 kannst du übrigens weglassen, das macht Bascom automatisch, wenn du Config Clock = Soft schreibst.
Gespeichert

Gruß, Stefan
uwe.z
Ich habe fuer das Forum gespendet.
Longposter
*
Online Online

Geschlecht: Männlich
Beiträge: 1225



« Antworten #5 am: 23. April 2009, 10:54:12 »

Hallo,

danke, das habe ich wirklich noch nie gehört.
Man(n) lernt ja immer noch gerne dazu...


Gruß

Uwe
Gespeichert

Wer Barfuss im Wald läuft hat schneller eine Tannennadel im Fuss stecken!
chw9999
Ich habe fuer das Forum gespendet.
Bytequäler
*
Online Online

Geschlecht: Männlich
Beiträge: 148



« Antworten #6 am: 23. April 2009, 20:00:20 »

Ich hab's gefunden!!!

Gerold, vielleicht  - falls Du das hier liest - könntest Du das im Post und auf Deiner Homepage ergänzen: PB6 (XTAL1/TOSC1) und PB7 (XTAL2/TOSC2) laufen über die Jumperleiste J9-J12 zurück auf die Pins 27 und 28 des ATmega8 - PC4 (ADC4/SDA) und PC5 (ADCS/SCL). Diese werden in meinem Beispiel für das LCD verwendet. Wenn sie nun im Loop angesprochen werden, sind sie manchmal hi, manchmal lo (je nach Ansteuerung des LCD), und je nach Status läuft der Quarz an oder nicht. Ohne Wait fast jeden Takt, mit Wait fast nie: daher der oben gesehene Effekt.

Wenn man J9 und J10 zieht (öffnet), funktionierts auch mit dem Quarz UND der LCD-Ausgabe

Dank and alle Mitwirkenden Smiley

hast du dir im Zusammenhang mit Config Clock mal die Option "Gosub Sectic" angeschaut? Damit kannst du in einer ISR z. B. einmal pro Sekunde das LCD ansteuern, unabhängig von der Hauptschleife und ohne Wait.
Jupp, angeschaut schon, implementiert aber noch nicht. Da ich viel Zeit im Zug verbringe, habe ich in den letzten Tagen die gesamte Hilfe wenigstens einmal Querlesen können - von vorne bis hinten! Da steht einiges Informatives drin, nur die Suchfunktion ist unter aller Kanone. Kann man den Index der Hilfe nicht neu aufbauen? Ist ja schrecklich wenig, was da an Wörtern drin steckt...

EDIT: http://bascom-forum.de/index.php?topic=2413.msg12497#msg12497


Cheers
Christoph
Gespeichert
Seiten: [1]   Nach oben
  Drucken  
 
Gehe zu:  

Ab 20€ Spende faellt die Werbung weg,fuer 1 Jahr.
impressum
Dilber MC Theme by HarzeM
Powered by SMF 1.1.11 | SMF © 2006-2009, Simple Machines LLC

©Bascom-forum.de