Hieronder mijn eerste c programma voor de pic16f1824.
elke keer de timer overflowd wordt counter met 1 verhoogd. counter telt echter 0,1,2,3,0,1,... . Dit kan ik zien aan de leds op mijn bordje.
Wat doe ik verkeerd? Gaat de compiler ervan uit dat counter een 2 bit getal is? Als ik "int counter" door "char counter" vervang blijft het programma hetzelfde
edit: ondertussen heb ik gevonden dat hij met kleinere prescaler waarden voor de timer, counter verder telt
option_reg = 0xD6 => tot 7
option_ref = 0xD5 => 15
Hoe komt dit?
#include "16F1824.H"
void main ( void)
{
int counter = 0x00;
TRISA = 0x00;
TRISC = 0x00;
OPTION_REG = 0xD7;
PORTA = 0x00;
PORTC = 0x00;
while (0 == 0)
{
if((INTCON & 0x04) == 0x04){ // check if timer overflow
INTCON = INTCON & (~0x04); //clear timer overflow bit
counter++;
}
//if ((counter & 0x01) == 0x01){ //check if counter's LSB = 1
if (counter == 0x01){
PORTA |= 1 << 2;
}
else {
PORTA &= ~(1 << 2);
}
if (counter == 0x02){
PORTC |= 1 << 1;
}
else {
PORTC &= ~(1 << 1);
}
if (counter == 0x03){
PORTC |= 1 << 3;
}
else {
PORTC &= ~(1 << 3);
}
if (counter == 0x04){
PORTC |= 1 << 5;
}
else {
PORTC &= ~(1 << 5);
}
if (counter == 0x05){
PORTA |= 1 << 4;
}
else {
PORTA &= ~(1 << 4);
}
}
}
sdk
PC9OGF
Je hebt de LEDs op verschillende poorten zitten, hoe ziet de hardware eruit?
Nu is het
counter port.bit (bit 7=MSB)
0x01 A.2
0x02 C.1
0x03 C.4
0x04 C.6
0x05 A.5
Dat lijkt een beetje een vreemde volgorde.
Verder, je int counter telt altijd door tot 0xFF en gaat dan weer naar 0x00. Je reset de counter nergens.
Post anders de disassembly eens, sowieso leerzaam, kun je zien wat de compiler er van bakt.
ik vraag me af hoe je dat kunt zien aan de leds, aangezien die timer een paar duizend keer per seconden zal aflopen.
@mbbneon: Ik heb de watchdog uitgezet en nu werkt het inderdaad. Geen idee waar deze voor dient, dat zal ik is moeten bestuderen.
@jesperR: Omdat de prescaler de timer nog is extra vertraagd. count wordt ongeveer elke seconde verhoogd
@sdk: is inderdaad niet erg logisch. Is een klein printje met wat schakelaars en ledjes gemaakt door een vriend.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Je kunt beter EERST de fuses en andere relevante settings bestuderen voordat je gaat programmeren...
(Op deze wijze wordt het anders meer een soort loterij...)
@Arco: Ik heb geprobeerd de basisinstellingen te snappen, maar deze functie is mij wat ontgaan. Je kan toch moeilijk 420 pagina's lezen alvorens je eerste programma te schrijven?
treinfreak
Look at me, I can't fly.....
420 pagina's is nog niet eens zo heel veel!
Het is verstandig voordat je een chip gebruikt de datasheet door te bladeren. Van deze 420 pagina's zijn er een hoop die je zo door leest of overslaat. (Bijv. info over de behuizing of de bestel informatie)
Ook is het lezen van de datasheet goed om te weten wat de chip allemaal nog meer kan. Maar om je alvast iets verder op weg te helpen.
Houd de volgende registers in de gaten:
- APFCON0
- APFCON1
- ANSELA
- ANSELB
- ANSELC
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Zoals gezegd hoef je echt niet alles door te lezen. Maar de fuses in ieder geval, want die heb je altijd nodig. En als je iets op een i/o pin aansluit kijk je in de datasheet naar die i/o pin. Als je de USART gebruikt, kijk je daarnaar, enz...
Op 7 augustus 2011 15:01:03 schreef bramBE:
@jesperR: Omdat de prescaler de timer nog is extra vertraagd. count wordt ongeveer elke seconde verhoogd
kan volgens mij niet kloppen, maar je geeft weinig info dus ik ga even gokken.
bij een intern kristal van 4Mhz gaat 1Mhz de prescaler in die maximaal 256 kan. daar komt dus 1000000/256 = 3906(ik slaap nog, dankje arco) keer per seconden een overflow uit. dan vraag ik me af hoe jij aan een seconden komt?
ik ben even de datasheet ingedoken en deze heeft toch zeker wat meer configuratie nodig dan je gemiddelde starters micro. ik schuif op dit moment de schuld af op de watchdog, maar er moet nog meer geconfigureerd worden.
Edit, dan kan ik me erbij voorstellen dat de interne is ingesteld op 31Khz.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com