Anoniem
ik wil een ontvanger gaan maken voor mijn klok
maar kan iemand me een klein beetje helpen hoe ik mijn dcf77 moet aansluiten
en hoe ik dit moet gaan aanpakken
ik kon niet erg veel vinden aan voorbeelden in verilog ''GEEN''
mvg
Ik weet niet wat jij intikt in Goechel Patrick, maar bij mij de eerste hit 
http://www.i-tip.de/projectDCF/dcfDoku.html
Groeten, Bram
Ik heb "DCF77 verilog" ingetikt.
Als ik "dcf77 fpga" doe is t nog de 4e hit.
Groeten, Bram
[Bericht gewijzigd door bprosman op (32%)]
flipflop
"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein
Oh, je was al bezig (zie m'n opmerking in fotopa's topic). Je zou natuurlijk ook gewoon zelf iets kunnen bedenken en niet eerst op internet zoeken. Je dcf ontvanger zal maar 1 signaaltje naar de fpga hebben, dus echt moeilijk is dat niet toch?
- timer om de pulslengte te meten.
- timeout om de missende puls (59sec) te detecteren
- schuifregister waar de bits ingaan.
- decoder die uit het schuifregister de info haalt.
- voila
Anoniem
het gaar mij niet om een volledige code maar hoe ik dit moet gaan aanpakken
want als ik dat voorbeeld zie is het wel een lap code
maar ik ga het proberen
Anoniem
bedankt picbasic !!
deze zin zegt mij een hoop ''DCF77 is vrij simpel.
Elke seconde (behalve seconde 59) komt er een pulsje binnen.
Voor een '0' duurt die puls 0,1 seconde en voor een '1' duurt het 0,2 seconden.''
nu gaat het vast wel lukken
mvg
flipflop
"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein
Tja, die info was nogal essentieel natuurlijk. Ik had verwacht dat je dat al lang gevonden had. Snap je nu mijn stappenplan hierboven ook?
Dat had je ook hier kunnen vinden :
http://www.giangrandi.ch/electronics/dcf77/signal.html
Groeten, Bram
Jochem
If you want to succeed, double your failure rate.
Ah, kijk, ik dacht al dat er zo'n topic kwam, na je opmerking in fotoopa's tutorial-topic...
Pak je het dit keer wel even wat anders aan dan normaal?
Anoniem
ik heb nog niet veel tijd gehad maar in het weekend wil ik gaan beginne
heeft iemand nog tips of commentaar
dan hoor ik dat graag
Jochem
If you want to succeed, double your failure rate.
Anoniem
ik ben nu volgens flipflop zijn stappen plan bezig
en ik heb nu een timertje zouden Julie er naar willen kijken ???
of ik het goed heb gedaan
dcf == input an de module
clk_1ms spreekt voor zich
reg [7:0] timer;//lengte puls
reg ip,cnt1;//IP == inkomende puls & cnt1 == puls voorbij kijken naar hoe lang de puls was
always @ (posedge clk_1ms)begin//timer om de pulslengte te meten
if (dcf == 1)begin
timer <= timer + 1;
cnt1 <= 1;
end
else if (dcf == 0 & cnt1 == 1)begin
if (timer <= 99)ip <= 0;
if (timer >= 199)ip <= 1;
cnt1 <= 0;
end
end
flipflop
"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein
Wat is ip als timer tussen 99 en 199 zit?
Ik zou geen 1ms clk gebruiken, tenzij dat je enige clk is die je in het systeem gebruikt. Zal wel niet. Maak in plaats daarvan een 1ms pulsje uit een geklokt process die op je echte clk loopt. Die 1ms puls test je dan in je teller process. Op jouw manier maak je een nieuw klokdomein en dat wil je niet.
Gebruik indents:
always @ (posedge clk_1ms)begin//timer om de pulslengte te meten
if (dcf == 1) begin
timer <= timer + 1;
cnt1 <= 1;
end
else if (dcf == 0 & cnt1 == 1) begin
if (timer <= 99)ip <= 0;
if (timer >= 199)ip <= 1;
cnt1 <= 0;
end
end
@xantus, goed opgelet hoor! Is ook wel zo makkelijk voor de synthese tool. Kan alles gewoon weg, ip vast aan 0.
Op 5 februari 2009 20:09:35 schreef flipflop:
Wat is ip als timer tussen 99 en 199 zit?
[/code]
Dat zal nooit gebeuren, timer is immers maar 1 bit groot en zit dus per definitie in de range [1, 0]
.
Anoniem
Op 5 februari 2009 20:16:56 schreef xantus:
[...]Dat zal nooit gebeuren, timer is immers maar 1 bit groot en zit dus per definitie in de range [1, 0]
.
sorry vergeten te veranderen in post
ik had het namelijk zelf ook al ontdekt
en volgens mij werkt die progje goed
want ik hem hem eens aan mijn scoop gehangen
ja ik heb nu een scoop 
ik had toch nog een fout gevonden
de timer werd niet gereset
always @ (posedge clk_1ms)begin//timer om de pulslengte te meten
if (dcf == 1) begin
timer <= timer + 1;
cnt1 <= 1;
end
else if (dcf == 0 & cnt1 == 1) begin
if (timer <= 110)ip <= 0;
if (timer >= 190)ip <= 1;
cnt1 <= 0;
timer <= 0;
end
end
[Bericht gewijzigd door Anoniem op (31%)]
Anoniem
beste leden
ik heb nu deze code en er zit volgens mij een fout in maar ik zie hem niet
ik weet wel dat die met de opslag te maken heeft
want mij opslag is niet goed
want ik heb sec aan 4 led's hangen en die worden steeds op anderen tijden gerefresht maar als ik hem na tel en dan ga kijken klopt het gene wat is opgeslagen wel alleen is het op de verkeerde plek opgeslagen
zou iemand me kunnen helpen ???
module dcf77 (
input clk_1ms,dcf,
output reg [3:0] sec,sec_t,min,min_t,uur,uur_t,
output reg cnt1,ip
);
reg [7:0] timer;
//reg ip,cnt1;
reg [9:0] timer2;
reg [59:0] tijd;
reg [7:0] positie;
reg bit0;
always @ (posedge clk_1ms)begin//timer om de pulslengte te meten
if (dcf == 1) begin
timer <= timer + 1;
timer2 <= 0;
cnt1 <= 1;
bit0 <= 0;
end
else if (dcf == 0 & cnt1 == 1) begin
if (timer2 >= 1970)bit0 <= 1;
if (timer <= 110)ip <= 0;
if (timer >= 190)ip <= 1;
cnt1 <= 0;
timer <= 0;
end
else if (dcf == 0)begin
timer2 <= timer2 + 1;
end
end
always @ (negedge cnt1 )begin
positie <= positie + 1;
if (bit0 == 1)positie <= 0;
tijd[positie] <= ip;
end
assign sec[3:0] = tijd[24:21];
endmodule
Zonder in detail te kijken gaat volgende regel niet op:
if (timer2 >= 1970)bit0 <= 1;
Gezien je timer2 slechts 10 bits is (max waarde kan niet boven de 1023)
Anoniem
o oke niet gezien
maar ik heb nog wat verandert hier de nieuwe code
niet werkend dus niet nodig
[Bericht gewijzigd door Anoniem op (94%)]
Anoniem
sorry verkeerde knop
het reset probleem is weg
maar nu gooit die soms de teler positie met 2 omhoog
kan iemand me helpen
module dcf77 (
input clk_1ms,dcf,
output reg [3:0] sec,sec_t,min,min_t,uur,uur_t,
output [9:0] out,
output [7:0] out2,
output reg cnt1,ip
);
reg [7:0] timer;
//reg ip,cnt1;
reg [13:0] timer2;
reg [59:0] tijd;
reg [7:0] positie;
always @ (posedge clk_1ms)begin
if (dcf == 1) begin
timer <= timer + 1;
timer2 <= 0;
cnt1 <= 1;
end
else if (dcf == 0 & cnt1 == 1) begin
if (timer <= 110)ip <= 0;
if (timer >= 190)ip <= 1;
cnt1 <= 0;
tijd[positie] <= ip;
positie <= positie + 1;
timer <= 0;
end
else if (dcf == 0)begin
timer2 <= timer2 + 1;
if (timer2 >= 1500)begin
positie <= 0;
timer2 <= 0;
end
end
end
assign out2 = positie;
assign out = tijd[29:20];
endmodule
[Bericht gewijzigd door Anoniem op (18%)]
flipflop
"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein
Gelukkig heb je de meerdere clk domeinen weer terug tot 1. Althans dat hoop ik want misschien heb je nog meer code eromheen. In code hierboven deed je nog hele foute dingen met 2 clk-en.
Teller met 2 omhoog zou kunnen komen doordag je input signaal niet een mooi pulsje is. Heb je al eens gemeten met de schoop? Anders even een testbench maken, dan zie je wat er gebeurd. Is zowieso erg handig als je design complexer wordt.
flipflop
"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein
- Zorgen voor betere ontvangst.
- 2e of 1e pulsje afkeuren in vhdl. Wel de pariteitbits testen want je hebt slecht ontvangst en weet dus niet zeker of je de goede bits hebt ingelezen.