Jeroen13
//Project Quadrocopter 2.0 in progress //dsESC4x //PIC32Flight
Hallo,
Ik wil binenkort een nieuwe robot gaan maken met rupsbanden, die kan navigeren door een route die ik uit stippel.
Wou dit doen d.m.v. encoders en digitaal kompas, aangezien GPS nogal duur en wat moeilijk is voor mij (gezien ik geen ervaring heb met I2C of andere IC communiecatie).
Nou is alleen mijn vraag hoe moet ik timen met een PIC in C, mijn vorige robot had ik voor het eerst timing nodig voor de servo's daar heb ik d.m.v. debuggen en een scoop de juiste timing kunnen vinden (althans in de buurt om het goed te laten werken).
Heb de timing nodig om te kunnen bereken hoe snel mijn robot gaat en welke afstand hij aflegt.
Gebruik zelf altijd Micrchip PIC´s en Hi-Tech PICC C-compiler.
Of is dit niet te doen in C en moet het dan in ASM ?
Groeten,
Jeroen
the-paradox
Duco ergo sum.
Tuurlijk kan dit in C. De timing werkt dan interrupt gestuurd. Is in C prima te programmeren.
Ik denk dat op de site van microchip ook wel enkele voorbeelden staan van interrupt sturing. Ff bladeren door de programma's die interrupt gestuurd zijn. Het betere knip&plak werk dus. 
Ergens voor in main je Int-register vullen en gelijk de Int starten. Zoiets :
INTCON=0x00;
GIE=1;
Dan de Int routine:
void interrupt InterruptOnTimer(void)
{
GIE=0; //TMR 0 Overflow
if(T0IF)
{
// jouw timing code
}
// etc...
}
Ik ben geen PIC specialist maar zoiets zou het moeten zijn toch?
Jeroen13
//Project Quadrocopter 2.0 in progress //dsESC4x //PIC32Flight
Op 7 juni 2006 22:01:16 schreef the-paradox:
Tuurlijk kan dit in C. De timing werkt dan interrupt gestuurd. Is in C prima te programmeren.
Ik denk dat op de site van microchip ook wel enkele voorbeelden staan van interrupt sturing. Ff bladeren door de programma's die interrupt gestuurd zijn. Het betere knip&plak werk dus.
Ergens voor in main je Int-register vullen en gelijk de Int starten. Zoiets :
INTCON=0x00;
GIE=1;
Dan de Int routine:
void interrupt InterruptOnTimer(void)
{
GIE=0; //TMR 0 Overflow
if(T0IF)
{
// jouw timing code
}
// etc...
}
Ik ben geen PIC specialist maar zoiets zou het moeten zijn toch?
Dat heb ik voor mijn vorige robot ook gebruikt om servo's aan te sturen, de timer2 interrupt.
Maar ik had bijvoorbeeld voor de sonar gewoon een variable gemaakt en die hoogde hij op totdat hij wat ontving, maar daar kon ik dus niet met de snelheid van geluid de afstand bereken want dat klopte niet.
the-paradox
Duco ergo sum.
Het lijkt mij dat je een verkeerd principe van meten hebt gekozen.
Als je dan eerst eens uitrekent of uittekent wat en hoe je iets wilt meten, dan is je probleem misschien al opgelost?
Je hoeft toch niet continue te meten, dit kan toch ook met een relatieve lage interval bv 0,1 seconde?
En als je externe processen wilt controleren (encoder) kun je ook externe interrupt(s) gebruiken op een hardware pin van je processor.
Tenminste als ze er op zitten op het type wat je gebruikt. 
Dit alles is normaal in C te programmeren. En nogmaals, soms helpt eerst uittekenen/beschrijven wat je wilt bereiken al heel veel.