Ja vidím největší problém v použití Céčka pro programování jakýchkoli
časově závislých operací.Kompilátor vygeneruje bludy,které není
možné ve finále ani odladit.
Jeejdo,v PIC18 je možné priority přiřazovat a taky je vypnout.Takže kdo neche nemusí je využívat.
Pokud má použitý mokrokontrolér alespoň jeden časovač,pak je možné
společne s vhoným časováním bezvadně ovládat tolik serv,kolik má
čip I/O vývodů.Samozřejmě s programem v ASM, a ještě si u toho bude hvízdat.
Řízení RC serva PICem - servo se cuká. Proč?
Moderátor: Moderátoři
- Jeejda_teda_puvodne
- Příspěvky: 142
- Registrován: 08 dub 2012, 02:00
Naposledy upravil(a) Jeejda_teda_puvodne dne 25 říj 2016, 13:10, celkem upraveno 1 x.
- Jeejda_teda_puvodne
- Příspěvky: 142
- Registrován: 08 dub 2012, 02:00
Naposledy upravil(a) Jeejda_teda_puvodne dne 25 říj 2016, 13:10, celkem upraveno 1 x.
No takže priority se dají jednoduše vyřešit přeskupením testování bitů:
.. a v mainu kontrolovat buffer a pocitat odchylku.
Kód: Vybrat vše
void interrupt() {
if (TMR1IF_bit) { // priorita 0
TMR1ON_bit = 0;
LATA4_bit = 0;
TMR1IF_bit = 0;
}
if (TMR0IF_bit) { // priorita 1
TMR0IF_bit = 0;
TMR0 = 100;
// ServoHandler(); zahodit, moc dlouhy a RefPos vypocitat v mainu
TMR1H = RefPosH;
TMR1L = RefPosL;
LATA4_bit = 1;
TMR1ON_bit = 1;
}
if (SSP1IF_bit){ // priorita 2
SSP1IF_bit = 0;
if (bufptr < ptrmax) {
Buff[bufptr].Status = SSPSTAT;
Buff[bufptr].Value = SSPBUF;
bufptr++;
CKP_bit = 1; .?.
}
}
}