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 had gewoon 'fpga dcf77'
maar ja Google blijft een raadsel

Ik heb "DCF77 verilog" ingetikt.

Als ik "dcf77 fpga" doe is t nog de 4e hit.

Groeten, Bram

[Bericht gewijzigd door bprosman op (32%)]

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

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

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

Tja, die info was nogal essentieel natuurlijk. Ik had verwacht dat je dat al lang gevonden had. Snap je nu mijn stappenplan hierboven ook?

ja nu is het wel duidelijk

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?

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

Heb je zelf al wat ingelezen? Misschien kun je dan met wat concretere vragen komen.

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

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] ;).

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%)]

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)

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%)]

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%)]

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.

ja mijn inkomende signaal is soms 2 pulsen snel achter elkaar
wat kan ik hier aan doen ???

- 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.