Partyflock
 
Forumonderwerp · 600071
Waarschuw beheerder
wie heeft er ervaring met het programmeren van microcontrollers? ik ben er zelf ook al mee begonnen, maar ik zit nog met een aantal (kleine) problemen.
Waarschuw beheerder
hmmm... er zijn er niet veel die die kennis hebben.. he.. forum nog leeg :)
ik heb er helaas geen verstand van maar vertel je probleemen maar is... wie weet ken iemand het als nog oplossen :d de enigste taal die ik ken is html, duits, engels en ned lol

succes verder..
 
Waarschuw beheerder
donateur
ja idd c++ toevallig? en welke IC's?
Waarschuw beheerder
ik ben aan het programmeren in pascal.
heb klein beetje ervaring met C(++) dus dat moet ik ook wel kunnen lezen.

en de IC's die ik aan het programmeren ben zijn:
de 80C54 microcontroller, de PCF85C2-P (een geheugen ic) en de PCF8583 (een klok IC).
en deze communiceren via het I2C protocol.

heb vanmiddag mijn problemen met het geheugen IC op kunnen lossen, maar ik heb nog steeds wat probleempjes met de klok IC.
ik ben er nog niet helemaal uit hoe ik bij dit klok ic het jaartal kan gaan invoeren.
de klok en datum heb ik al wel werkende gekregen.
maar hoe het precies met de jaartallen zit, krijg ik niet in de data sheets gevonden.
 
Waarschuw beheerder
donateur
ik zal straks even kijken heb nog een hele hoop boeken :)
Waarschuw beheerder
de datasheets van al die IC's heb ik al, en ik ben al een heel eind, maar kom er nu eventjes niet meer uit :(
 
Waarschuw beheerder
donateur
hoe ziet het werkende gedeelte van de tijd en datum eruit? :)
Waarschuw beheerder
2 Thom-ass--> ik heb op het moment genoeg documentatie van de 8051 serie, maar toch bedankt.

het werkende gedeelte van mijn tijd en datum ziet er zo uit:

procedure setklok;
begin
I2Cwrite($A0,$00,$80);
sec:=55;
min:=35;
uur:=8;
var1:=sec div 10;
var2:=sec mod 10;
var1:=var1 shl 4;
sec:=(var1 AND %00110000) + (var2 AND %00001111);
I2Cwrite($A0,$02,sec);
var1:=min div 10;
var2:=min mod 10;
var1:=var1 shl 4;
min:=(var1 AND %00110000) + (var2 AND %00001111);
I2Cwrite($A0,$03,min);
var1:=uur div 10;
var2:=uur mod 10;
var1:=var1 shl 4;
uur:=(var1 AND %00110000) + (var2 AND %00001111);
I2Cwrite($A0,$04,uur);
end;

procedure setdatum;
begin
I2Cwrite($A0,$00,$80);
day:=14;
month:=2;
year:=2003;
var1:=day div 10;
var2:=day mod 10;
var1:=var1 shl 4;
day:=(var1 AND %00110000) + (var2 AND %00001111);
I2Cwrite($A0,$05,day);
var1:=month div 10;
var2:=month mod 10;
var1:=var1 shl 4;
month:=(var1 AND %11110000) + (var2 AND %00001111);
I2Cwrite($A0,$06,month);
end;

procedure leesklok;
begin
I2Cread($A0,$04);
h:=buff;
var1:=highnib(h);
var2:=lownib(h);
gotoxy(3,0);
send(var1);
send(var2);
send($0A);
I2Cread($A0,$03);
m:=buff;
var1:=highnib(m);
var2:=lownib(m);
send(var1);
send(var2);
send($0A);
I2Cread($A0,$02);
s:=buff;
var1:=highnib(s);
var2:=lownib(s);
send(var1);
send(var2);
end;

procedure leesdatum;
begin
I2Cread($A0,$05);
day:=buff;
var1:=highnib(day);
var2:=lownib(day);
gotoxy(4,0);
send(var1);
send(var2);
send($0D);
I2Cread($A0,$06);
month:=buff;
var1:=highnib(month);
var2:=lownib(month);
send(var1);
send(var2);
send($0D);
send($00);
send(year);
end;


de tijd en datum hebben nu nog een vaste waarde, maar deze moeten uiteindelijk zelf ingevoerd worden (maar dit is maar een kleine aanpassing en die is zo gebeurd)
 
Waarschuw beheerder
donateur
Pascal..:S

Volgens mij werkt deze anders als een 'normale' RTC..??

twee bits voor de vier jaars cycles..

Wanneer je het jaar vaststeld moet je waarschijnlijk een ram 'geheugen' opslaan..

De twee bits moeten hierin geladen worden.

Daarna moet er vastgesteld gaan worden wat er moet gebeuren als het jaar verhoogd wordt:

'leapyear' be 0; for 2003
'leapyear' be 1; for 2004

ect. ect.
dit moet het zijn... weet alleen niet hoe dit eruit moet komen te zien in pascal :S

succes iig
Waarschuw beheerder
dit is inderdaad anders dan een normale RTC.
deze RTC slaat de waardes op als BCD (binairy coded decimal).
ik ben er ook al achter dat ik het in een geheugen kan zetten. maar ik wil mijn programma zo compact mogelijk hebben (heb namelijk maar 16k tot mijn beschikking)

volgens de datasheets moet het ook anders kunnen.
volgens de data sheets moet de byte er zo uit komen te zien:

MSB LSB
---------------------------------
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---------------------------------

bits 6 en 7: jaar: 0 tot 3 (binairy code)
bits 5 en 4: aantal units van 10 dagen: 0 tot 3 (binairy code)
bits 3,2,1 en 0: units van 1 dagen (BCD formaat)

tot zover ik het nu heb, hak ik deze byte op in 2 nibble's (groepjes van 4 bits)
zo schrijf ik ze naar het klok IC
en vervolgens lees ik het klok IC uit, en zet het weer om naar normale binaire code.

maar ik krijg het jaartal niet uit deze byte gefilterd.

ik heb ook al half internet afgezocht naar voorbeelden, maar ik krijg alleen programma's gevonden in assembler (en daar kan ik niet mee overweg :S))