hallo co´ers
ik heb een vraagje over eenlichtkrant aansturen
en ik heb op de site al veel gelezen maar niet wat ik zocht
ik heb een lichtkrant liggen die ik met een pic wil aansturen
op het schema van de lichtkrant heb de signalen data clk en clr.
hier moet ik iets mee
maar ik snap niet goed hoe ik het moet doen.
graag een uitleg hoe zo iets werkt principe
hadv
Just find out what you like and let it kill you
Het is wel heel weinig info, maar ik ga mijn best doen.
'Data' lijkt me duidelijk, hierop moeten de bitpatronen voor de lichtkrant worden gezet.
'Clk' is de clock waarmee de 'Data' naar binnen worden gestuurd.
'Clr' is niet helemaal éénduidig. Het kan zijn dat deze de lichtkrant wist, maar het kan ook een soort van 'en- of disable' zijn.
Maar de grote vragen zijn natuurlijk:
- hoe hoog is de kloksnelheid die je moet/mag aanbieden?
- hoe ziet het bitpatroon er uit. Hier zijn twee basis variaties mogelijk: per rij of per kolom. Gegeven het feit dat het een lichtkrant is die moet kunnen lopen is de meest voor de hand liggende variant de kolom. Je stuurt dan telkens een bit voor die kolom en zodra die vol is zou de lichtkrant zomaar dit patroon laten zien. Bij de volgende schuift het dan gewoon door.
Zonder deze informatie kom je er niet uit.
Ik neem aan dat die lichtkrant ook nog een voedingsspanning nodig heeft. Als die afwijkt van de +5 van een uC zou het wel eens lastig kunnen worden, omdat je dan vermoedelijk je uitgangssignaal op dat nivo moet brengen.
Je zegt dat je het schema hebt, dat zou je met ons kunnen delen (via upload archief bv).
Wat je kunt doen is gewoon experimenteren.
Hang de Clk op een output-pin en genereer daar een kloksignaal op. Begin laag, zo'n 25 HZ.
Hang de Data op een andere output-pin.
Bij elke 'hoog' van de klok toggle je de data-pin.
Hang Clr aan de ground.
Doet-ie nix, kijk dan of het met Clr aan de +5 wel gaat.
M-i-c-h-e-l
Honourable Member
Tommyboy
Zo goed als het vroeger was, is het nooit geweest.
Een grotere versie, welke ook daadwerkelijk leesbaar is, zou flink helpen.
Hoeveel kennis heb je van PICs? Heb je al eens een LEDje laten knipperen? Heb je al eens een kleine (5x7 of 8x8 ofzo) LED matrix aangestuurd?
Tommyboy
Zo goed als het vroeger was, is het nooit geweest.
Zucht. We proberen het nog een keer.
- Heb je al een groter formaat van het schema geupload, waar we daadwerkelijk kunnen lezen en zien wat welk IC is, en hoe het aangesloten is?
- Hoeveel kennis heb je van PICs?
- Heb je al eens een LEDje laten knipperen met een PIC?
- Heb je al eens een kleine (5x7 of 8x8 ofzo) LED matrix aangestuurd met een PIC?
Nee ik heb nog geen groter schema
Ja ik heb enige kennis heb de cursus van Fritz' kieftenbelt door genomen
Ja ik heb een led laten knipperen
Ja ik heb een matrix aangestuurd
Op het schema zijn de data clk en clr te zijn en de zeven datalijnen
Waar ik iets mee moet graag hulp hoe ik dit aansluit. En programmeer
Tommyboy
Zo goed als het vroeger was, is het nooit geweest.
Je hebt niet 7 datalijnen, je hebt 7 row-select lijnen.
Je moet simpelweg het volgende doen:
data voor rij 1 inklokken
data latchen
rij 1 aanzetten
data voor rij 2 inklokken
rij 1 uitzetten
data latchen
rij 2 aanzetten
data voor rij 3 inklokken
rij 2 uitzetten
data latchen
rij 3 aanzetten
Et cetera.
Kleine kans overigens dat dit je in PIC basic gaat lukken, dat is te traag, VEEL TE TRAAG, voor multiplexen op deze schaal. Ga maar naar C of ASM.
Ik heb een lichtkrant gemaakt volgens dit schema:
http://www.uploadarchief.net/files/download/lichtkrant-klok2.gif
en :
http://www.uploadarchief.net/files/download/lichtkrant-klok%2B.gif
Zie mijn post van zaterdag 16 april 2011 21:22:52 voor de picbasic code : DCF samen met de huisautomatisering .
Werkt prima in Picbasic
Groeten
hadv
Just find out what you like and let it kill you
Op 27 augustus 2012 22:24:20 schreef Tommyboy:
Kleine kans overigens dat dit je in PIC basic gaat lukken, dat is te traag, VEEL TE TRAAG, voor multiplexen op deze schaal. Ga maar naar C of ASM.
Waarom zou PIC basic hiervoor "VEEL TE TRAAG" zijn en C niet?
Wat een ongelooflijke flauwekul. Proton genereeert gewoon assembler, en die ziet er goed uit. Bovendien kun je in Proton ook met interrupts werken.
Ik heb een GPS gestuurde loopklok gebouwd met 4 stuks 8x8 led matrices.
In Proton.
Loopt als een speer!
Dus aub geen ongefundeerde onwaarheden verkondigen, zeker niet als het klaarblijkelijk om een nog niet heel erg ervaren TS gaat.
hallo beste looier
ik kan je inzending van 16 april niet vinden
ik vind wel een dcf voor huisautomatisering
maar die is van een ander persoon
ook op datum zoeken vindt ik niks
graag antwoord lijkt me interrsesant wat je doet
eventueele vragen volgen nog nu ga ik maar eens wat experimenteren
met jullie nuttige tips
groeten olan
In het artikel : DCF samen met de huisautomatisering, staat er op de laatste pagina mijn post.
Mijn code voor de lichtkrant:
'*******************************************
'* Naam : lichtkrantklok 5 x 7 16F628A *
'* Datum : 12/04/2011 OK *
'*******************************************
; PIC16F628A
; +-----v-----+
; 1[A.2 A.1]18> Data lijn voor de 74164
; 2[A.3 A.0]17> Kloklijn voor de 74164
; 3[A.4 A.7]16< XTAL 20 MHz
; 4[A.5 A.6]16< XTAL 20 MHz
; GND 5[ ]14 +5V
; 6[B.0 B.7]13> stuurt A2 74238
; ontvangt code>7[B.1 B.6]12> stuurt A1 74238
; 8[B.2 B.5]11> stuurt A0 74238
; 9[B.3 B.4]10
; +-----------+
;
Device 16F628A ;We gebruiken een 16F628A type
Config WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF, HS_OSC
XTAL 20 ;Kristal van 20MHz
ALL_DIGITAL TRUE ;Alle ingangen digitaal
HSERIAL_BAUD = 2400 ;Transmissiesnelheid van de data over de bus
HSERIAL_RCSTA = %10010000 ;Bit7:Enable serial port / Bit4:Continu ontvangen
HSERIAL_TXSTA = %00000000 ;Bit5:Transmitpin uitgeschakeld (TXEN (Transmit ENable) = 0)
;Algemene constanten
Symbol Baud2400I = 16780 ;2400 Baud Inverted (baudrate voor SEROUT)
TRISA = %11111000 ;A.0,A.1 en A.2 sturen de 74164
TRISB = %00011111 ;B.5,B.6 en B.7 sturen de 74238
PORTA = 0
PORTB = 0
Symbol tijd = 500
Symbol klok = PORTA.0 ; geeft klokpuls aan de 74164
Symbol Dat = PORTA.1 ; geeft de Data aan de 74164
Symbol A0 = PORTB.5 ; stuurt A0 74238
Symbol A1 = PORTB.6 ; stuurt A1 74238
Symbol A2 = PORTB.7 ; stuurt A2 74238
Symbol SerieelIn = PORTB.1 ;Ontvangt via HSERIN data van de bus (B.1 = USART ingang, RX)
Dim een[8] As Byte
Dim twee[8] As Byte
Dim drie[8] As Byte
Dim vier[8] As Byte
Dim vijf[8] As Byte
Dim zes[8] As Byte
Dim zeven[8] As Byte
Dim acht[8] As Byte
Dim negen[8] As Byte
Dim nul[8] As Byte
Dim blank[8] As Byte
Dim rij As Byte
Dim kolom As Byte
Dim digit[8] As Byte
Dim w As Byte
Dim x As Byte
Dim y As Byte
Dim z As Byte
Dim VAR1 As Byte
Dim VAR2 As Byte
Dim VAR3 As Byte
Dim VAR4 As Byte
Dim Opdracht As Word
VAR1 = 1
VAR2 = 2
VAR3 = 3
VAR4 = 4
y = 1
z = 1
een[1] = 4
een[2] = 6
een[3] = 5
een[4] = 4
een[5] = 4
een[6] = 4
een[7] = 31
twee[1] = 14
twee[2] = 17
twee[3] = 16
twee[4] = 12
twee[5] = 2
twee[6] = 1
twee[7] = 31
drie[1] = 31
drie[2] = 16
drie[3] = 8
drie[4] = 12
drie[5] = 16
drie[6] = 17
drie[7] = 14
vier[1] = 8
vier[2] = 12
vier[3] = 10
vier[4] = 9
vier[5] = 31
vier[6] = 8
vier[7] = 8
vijf[1] = 31
vijf[2] = 1
vijf[3] = 15
vijf[4] = 16
vijf[5] = 16
vijf[6] = 17
vijf[7] = 14
zes[1] = 28
zes[2] = 2
zes[3] = 1
zes[4] = 15
zes[5] = 17
zes[6] = 17
zes[7] = 14
zeven[1] = 31
zeven[2] = 16
zeven[3] = 8
zeven[4] = 4
zeven[5] = 2
zeven[6] = 2
zeven[7] = 2
acht[1] = 14
acht[2] = 17
acht[3] = 17
acht[4] = 14
acht[5] = 17
acht[6] = 17
acht[7] = 14
negen[1] = 14
negen[2] = 17
negen[3] = 17
negen[4] = 30
negen[5] = 16
negen[6] = 8
negen[7] = 7
nul[1] = 14
nul[2] = 17
nul[3] = 17
nul[4] = 17
nul[5] = 17
nul[6] = 17
nul[7] = 14
blank[1] = 0
blank[2] = 0
blank[3] = 0
blank[4] = 0
blank[5] = 0
blank[6] = 0
blank[7] = 0
;hoofdprogramma
GoSub wis
opnieuw:
OpdrachtUitvoeren:
VAR1 = Dig Opdracht , 3
VAR2 = Dig Opdracht , 2
VAR3 = Dig Opdracht , 1
VAR4 = Dig Opdracht , 0
If VAR1 = 0 Then VAR1 = 10
digit[1] = VAR1
digit[2] = VAR2
digit[3] = VAR3
digit[4] = VAR4
For rij = 1 To 7
For x = 1 To 4
z = digit[x]
For kolom = 0 To 4
GoSub testen
Dat = GetBit y , kolom
GoSub schuif
Next kolom
If x < 4 Then GoSub schuif ; spatie tussen de cijfers
If x = 2 Then GoSub schuif ; extra spatie tussen de tweede en derde cijfers
Next x
Select rij ;We gaan PORT A sturen
Case 1
A0 = 1 ; Stuurt A0 van 74238
DelayUS tijd
A0 = 0
Case 2
A1 = 1 ; Stuurt A1 van 74238
DelayUS tijd
A1 = 0
Case 3
A0 = 1
A1 = 1 ; Stuurt A0 en A1 van 74238
DelayUS tijd
A0 = 0
A1 = 0
Case 4
A2 = 1 ; Stuurt A2 van 74238
DelayUS tijd
A2 = 0
Case 5
A0 = 1
A2 = 1 ;Stuurt A0 en A2 van 74238
DelayUS tijd
A0 = 0
A2 = 0
Case 6
A1 = 1
A2 = 1 ; Stuurt A1 en A2 van 74238
DelayUS tijd
A1 = 0
A2 = 0
Case 7
A0 = 1
A1 = 1
A2 = 1 ; Stuurt A0 en A1 en A2 van 74238
DelayUS tijd
A0 = 0
A1 = 0
A2 = 0
EndSelect ;Einde SELECT CASE blok
Next rij
HSerIn 7, Verder, [Opdracht] ;Time out staat op 7mSec
GoTo OpdrachtUitvoeren ;Voer opdracht uit
Verder:
GoTo opnieuw ;Spring naar 'Opnieuw' en ga zo steeds door
; subroutines:
schuif:
High klok
Low klok
Low Dat
Return
wis:
Low Dat
For w = 1 To 25
High klok
Low klok
Next w
Return
blanko:
GoSub schuif
GoSub schuif
GoSub schuif
GoSub schuif
GoSub schuif
testen:
Select z ;We gaan de variabele z testen
Case 0
y = nul[rij]
Case 1
y = een[rij]
Case 2
y = twee[rij]
Case 3
y = drie[rij]
Case 4
y = vier[rij]
Case 5
y = vijf[rij]
Case 6
y = zes[rij]
Case 7
y = zeven[rij]
Case 8
y = acht[rij]
Case 9
y = negen[rij]
Case 10
y = blank[rij]
EndSelect ;Einde SELECT CASE blok
Return
End ;Einde programma
ENDMijn picbasiccode voor de DCF decodering die naar de lichtkrant gestuurd word:
'*******************************************************************
'* Naam : klok lcd 2x20 + zender van code naar tweede PIC16F628 *
'* Datum : 12/04/2011 *
'*******************************************************************
; PIC16F628A: +----v----+
; EN-PIN voor LCD <1[A.2 A.1]18> Een puls per seconde
; RS-PIN voor LCD <2[A.3 A.0]17< 12:00 (AM/PM) of 24:00 notatie
; DCF77 module >3[A.4 A.7]16< XTAL 16 MHz
; Vrij 4[A.5 A.6]15< XTAL 16 MHz
; GND 5[ ]14 +5V
; Vrij 6[B.0 B.7]13> DB7 LCD
; Vrij 7[B.1 B.6]12> DB6 LCD
; Zend SerieelUit<8[B.2 B.5]11> DB5 LCD
; Vrij 9[B.3 B.4]10> DB4 LCD
; +---------+
Device = 16F628A
Config HS_OSC, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF ;Interne RC-oscillator
XTAL = 16 ;Gebruik een kristal van 16MHz
HSERIAL_BAUD = 2400 ;Transmissiesnelheid van de data over de bus
ALL_DIGITAL TRUE
;Algemene constanten
Symbol Baud2400I = 16780 ;2400 Baud Inverted (baudrate voor SEROUT)
;Normale aliases (constanten)
Symbol Blokje = 255 ;Maximaal 255: 255 is de ASCII code voor een blokje op de LCD tijdsbalk
Symbol LCD_Char = 16 ;Minimaal 16: Aantal karakters per regel (afhankelijk van het gebruikte LCD type)
Symbol MaxVindTijd = 65 ;Minimaal 65: (Sec) Tijd om seconde 00 te vinden
Symbol OpStartTijd = 45000 ;Maximaal 65535: (mSec) 45 seconden opstart tijd voor de DCF77 module na power-on
Symbol PulsLengte = 740 ;Minimaal 500! Maximaal 750: (mSec)
Symbol PulsLengteX = PulsLengte / 10
;Logische aliases (constanten)
Symbol AAN = 0 ;Omgekeerd ON
Symbol FALSE = 0
Symbol OFF = 0
Symbol On = 1
Symbol TRUE = 1
Symbol UIT = 1 ;Omgekeerd OFF
;Poort aliases
Symbol SecondePuls = PORTA.1 ;Iedere seconde een puls van 0,5 seconde
Symbol DCF_Signaal = PORTA.4 ;Ingang voor de DCF77 module (ontvanger) signaal (bv. Conrad BN641138)
Symbol SerieelUit = PORTB.2 ;Stuurt via C naar de bus (B.2 = USART uitgang, TX)
; 76543210
TRISA = %11110001
TRISB = %11110000
PORTB_PULLUPS On ;Pull-up voor DCF77 ontvanger
;WORD
Dim SignaalCheck As Word
Dim Teller As Word
Dim Tijd As Word
; Hier stond Dim Tijd As DWord
;BYTE
Dim AlgemeneTeller As Byte
Dim BitAantal As Byte
Dim CursorPos As Byte ;Cursor x-positie op de LCD
Dim Dag As Byte
Dim Jaar As Byte
Dim Maand As Byte
Dim Minuut As Byte
Dim MinuutDCF As Byte ;Bevat de DCF minuut, is er een pariteitserror, dan wordt Minuut NIET gelijk gemaakt met MinuutDCF, maar alleen met 1 verhoogd
Dim OntvangByte As Byte
Dim Seconde As Byte
Dim Uur As Byte
Dim UurDCF As Byte ;Bevat het DCF uur, is er een pariteitserror, dan wordt Uur NIET gelijk gemaakt met UurDCF
Dim UurLCD As Byte ;Normaal gelijk aan Uur, alleen bij AM/PM notatie wijkt hij 's middags af
Dim WeekDag As Byte
Dim BD1 As Byte ;Byte Dummy 1
Dim VAR1 As Byte
Dim VAR2 As Byte
Dim VAR3 As Byte
Dim VAR4 As Byte
;BIT
Dim Initialiseren As Bit ;TRUE bij initialiseren
Dim OntvangBit As Bit
Dim PariteitsBit As Bit
Dim PariteitsError As Bit
Dim Signaal As Bit ;TRUE als er een signaal is (gevonden)
Dim ID1 As Bit ;Bit Dummy 1
PORTA = 0
PORTB = 0
Declare LCD_ENPIN PORTA.2
Declare LCD_RSPIN PORTA.3
Clear
DelayMS 200 ;LCD stabilisering
Cls
Print "Signaal zoeken"
Initialiseren = TRUE
GoTo HoofdLus ;Spring over de subroutines
;SUBROUTINES
OntvangBitAantal: ;Vul het ontvangstbyte met het opgegeven aantal bits in BCD mode
Clear OntvangByte
For BD1 = 0 To BitAantal - 1
GoSub OntvangEenBit
If OntvangBit = 1 Then SetBit OntvangByte, BD1
Next
OntvangByte = ((OntvangByte >> 4) * 10) + (OntvangByte & 15) ;BCD (Binary-Coded Decimal) naar byte conversie
Return
OntvangEenBit: ;Ontvang een bit en bewaar dit in OntvangBit
Clear Teller
While DCF_Signaal = AAN
DelayMS 1
Inc Teller
If Teller > 3000 Then ErrorOntvangst ;Tegen een eventuele 'hang up'
Wend
DelayMS 155 ;135 - 175msec
OntvangBit = DCF_Signaal
If Initialiseren = TRUE Then
CursorPos = (Seconde * LCD_Char) / 58 ;Bereken waar de cursor moet staan (afhankelijk van de wachttijd en LCD type)
Print At 2, CursorPos, Blokje ;Maak tijdsbalk actueel
Else
Print At 1, 7, DEC2 Seconde ;Zet de seconden op het LCD
PariteitsBit = PariteitsBit + OntvangBit ;Bit, dus 0+0=0 / 0+1=1 / 1+1=0 / 1+0=1
EndIf
Inc Seconde ;Omdat we toch elke seconde in deze routine zijn, gebruiken we het ook om de seconden te tellen
Print At 1, 7, DEC2 Seconde ;Zet de seconden op het LCD
SecondePuls = On ;Uitgangssignaal seconde puls
DelayMS 500
SecondePuls = OFF
DelayMS PulsLengte - 500
Return
;HOOFDPROGRAMMA
HoofdLus:
Clear AlgemeneTeller
Seconde = 00 ;Start met de eerste seconde
Signaal = FALSE
While Signaal = FALSE ;Wacht tot het DCF signaal hoog is
Clear Teller
While DCF_Signaal = UIT
Inc Teller
DelayMS 1
If Teller > OpStartTijd Then ErrorOntvangst ;Opstart tijd voor de DCF77 ontvanger bij power-on
Wend
Clear Teller
While DCF_Signaal = AAN ;Meet de tijd tussen de pulsen
Inc Teller
DelayMS 10
If Initialiseren = FALSE Then
Select Case Teller
Case 85 - PulsLengteX ;85 = (1000mSec - 155mSec) / 10
Case 25
SecondePuls = On
Case 75
SecondePuls = OFF
Case 250
GoTo ErrorOntvangst;Signaal is niet binnen de tijd van niveau veranderd
EndSelect
Else
If Teller > (OpStartTijd / 10) Then ErrorOntvangst ;Opstart tijd voor de DCF77 ontvanger bij power-on
EndIf
Wend
If AlgemeneTeller >= MaxVindTijd Then ErrorOntvangst ;Als er meer dan 'MaxVindTijd' seconden zijn geteld dan hebben we een probleem
Inc AlgemeneTeller
If Teller > 100 Then Signaal = TRUE ;We tellen per 10mSec, dus we hebben minstens 100x10mSec nodig om het begin te vinden
If Initialiseren = TRUE Then
CursorPos = (AlgemeneTeller * LCD_Char) / MaxVindTijd ;Bereken waar de cursor moet staan (afhankelijk van de wachttijd en LCD type)
Print At 1, 1, "Signaal gevonden"
Print At 2, CursorPos , Blokje ;Zet blokjes op het LCD tijdens wachten op het init signaal
EndIf
Wend
If Initialiseren = TRUE Then
Cls
Print "Initialiseren..."
Print At 2, 1, Rep "_" \ LCD_Char ;Teken een dunne lijn die aangeeft hoe lang de tijdsbalk wordt
Else
CursorPos = LCD_Char - 9 ;X-positie van tijd op het LCD
Cursor 1, CursorPos
EndIf
If PariteitsError = TRUE Then ;Tijd onbetrouwbaar, de PIC zorgt nu zelf voor actualisering van de tijd
If Minuut < 59 Then
Inc Minuut
Else
Minuut = 00 ;\
If Uur < 23 Then ;-Tijd wordt gelijk gezet, ondanks pariteitserror
Inc Uur ;/
Else
Uur = 00 ;De datum verhogen heeft geen zin, die wordt bij een error nl. niet gewijzigd
EndIf
EndIf
Else ;Geen error, dus gewoon de DCF tijd neerzetten
Minuut = MinuutDCF
Uur = UurDCF ;Het uur wordt alleen geactualiseerd als er geen pariteitserror is
EndIf
UurLCD = Uur
Cls
If UurLCD < 10 Then Print " " ;Wis de eerste nul (08:00:00 --> 8:00:00) (Nul onderdrukking)
Print Dec UurLCD, ":", DEC2 Minuut, ":" ;Zet elke minuut de actuele tijd op het LCD
Tijd = UurLCD * 100
Tijd = Tijd + Minuut
Print At 1, 10, Dec Tijd
VAR1 = Dig Tijd , 3
VAR2 = Dig Tijd , 2
VAR3 = Dig Tijd , 1
VAR4 = Dig Tijd , 0
Print At 2, 1, Dec VAR1
Print At 2, 4, Dec VAR2
Print At 2, 7, Dec VAR3
Print At 2, 10, Dec VAR4
RCSTA = %00000000 ;Zet USART uit, anders ontvangt deze zijn eigen verzonden data
SerOut SerieelUit, Baud2400I, [Tijd] ;Geinverteerd verzenden (vanwege BC547)
If Signaal = TRUE Then ;Startbit succesvol ontvangen, start met het vullen van data
GoSub OntvangEenBit ;0: Bit 0 (gereserveerd (DCF77 protocol)
Verder: ;Als de gong klinkt, wordt bit 0 genegeerd, na de gong, wordt hier verder gegaan
For BD1 = 1 To 14 ;1...14: deze bits zijn gereserveerd (info zie www.picbasic.nl --> DCF77 info)
GoSub OntvangEenBit
Next
Clear PariteitsBit ;Als PariteitsError is geset, dan is PariteitsBit ook verminkt (geweest), even resetten
Clear PariteitsError ;Reset PariteitsError (Deze 2 resets op deze plek laten staan ivm. pariteitserror tijdens initialiseren)
GoSub OntvangEenBit ;15: Welke zend antenne is gebruikt?
GoSub OntvangEenBit ;16: Omschakeling naar zomer/winter volgend uur?
; IF OntvangBit = 1 THEN... ;Dit bit wordt niet gebruikt in dit programma
GoSub OntvangEenBit ;17: Zomer- of wintertijd?
For BD1 = 18 To 19 ;18...19: Deze bits worden niet gebruikt (Time Zone bit 2 en schrikkel-seconde bit)
GoSub OntvangEenBit
Next
GoSub OntvangEenBit ;20: Startbit, normaal altijd 1, dit bit wordt niet gebruikt in dit programma
; IF OntvangBit = 0 THEN... ;Dit bit wordt niet gebruikt in dit programma
BitAantal = 7 ;21...27: Ontvang minuut (7 bits)
GoSub OntvangBitAantal
MinuutDCF = OntvangByte ;Wordt eerst in MinuutDCF opgeslagen, als blijkt dat er geen pariteitserror is, dan wordt het aan Minuut gegeven, bij een error niet
GoSub OntvangEenBit ;28: Pariteitsbit 1, minuten
If PariteitsBit = On Then PariteitsError = TRUE
BitAantal = 6 ;29...34: Ontvang uur (6 bits)
GoSub OntvangBitAantal
UurDCF = OntvangByte ;Wordt eerst in UurDCF opgeslagen, als blijkt dat er geen pariteitserror is, dan wordt het aan Uur gegeven, bij een error niet
GoSub OntvangEenBit ;35: Pariteitsbit 2, uren
If PariteitsBit = On Then PariteitsError = TRUE
BitAantal = 6 ;36...41: Ontvang dag (6 bits)
GoSub OntvangBitAantal
Dag = OntvangByte
BitAantal = 3 ;42...44: Ontvang weekdag (3 bits)
GoSub OntvangBitAantal
WeekDag = OntvangByte
BitAantal = 5 ;45...49: Ontvang maand (5 bits)
GoSub OntvangBitAantal
Maand = OntvangByte
BitAantal = 8 ;50...57: Ontvang jaar (8 bits)
GoSub OntvangBitAantal
Jaar = OntvangByte
GoSub OntvangEenBit ;58: Pariteitsbit 3, datum
If PariteitsBit = On Then PariteitsError = TRUE
If Initialiseren = TRUE Then
If PariteitsError = FALSE Then ;Als er GEEN pariteitserror is, dan zijn we...
Initialiseren = FALSE ;...klaar met initialiseren (Dus opnieuw initialiseren als er WEL een pariteitserror tijdens initialiseren was
EndIf
Cls
EndIf
EndIf
GoTo HoofdLus
GoTo Verder ;Ga verder met het lezen van de DCF77 bits vanaf bit 1 (We slaan de DCF77 bit 0 over)
ErrorOntvangst:
Cls
Print "Geen signaal" ;Startbit niet gevonden of geen signaal?
Repeat
Clear ;Wis alle RAM
ID1 = DCF_Signaal
While DCF_Signaal = ID1 ;Wacht op signaal verandering
Inc SignaalCheck
DelayMS 1
Wend
ID1 = ID1 ^ 1
While DCF_Signaal = ID1 ;Wacht op signaal verandering
Inc SignaalCheck
DelayMS 1
Wend
Until SignaalCheck < 990
Initialiseren = TRUE ;Na een error moet er weer worden geinitialiseerd
GoTo HoofdLus
ENDDit werkt echt perfekt, ik hoop dat je er iets aan hebt.
