- Messaggi: 174
- Ringraziamenti ricevuti 2
timer e funzione WriteTimer.
per pilotare un servo con un potenziometro ho scaricato il programma di Pinna da QUI .
Questo programma che funziona molto bene usa due funzioni WriteTimer0 per il Timer0 e WriteTimer1 per il Timer1 che servono a trasferire nei relativi registri TMR0H e TMR0L del Timer0 e nei registri TMR1H e TMR1L del timer1 il valore di una variabile decimale .
Fin qui è tutto apposto.
Il mio problema e che vorrei pilotare un servo a distanza tramite gli NRF24L01 per i quali vorrei utilizzare una libreria scritta da Fabio Fenoglio che si può scaricare da QUI .
Non ho trovato altre librerie soddisfacenti per pic ma una marea per arduino.
Questa libreria è scritta in MikroC, di conseguenza non posso utilizzare le funzioni che ho menzionato sopra.
Non ho trovato funzioni simili in MikroC (almeno credo).
Quindi non mi resta che rendere portabile il programma di Pinna creando io le funzioni ma questo e facile se il valore è costante ma se questo valore cambia con il variare del potenziometro la situazione si complica.
Sono aperto a qualsiasi consiglio.
Massimo.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- mpeino
- Autore della discussione
- Elite Member
Le funzioni writeTimer0 e WriteTimer1,servono per ricaricrae il valore a 16 bit nei 2 registri TMR0H e TMR0L (o TMR1H e TMR1L) puoi benissimo sostituirle proprio ricaricando i registri separatamente.
Es.
nel codice di Pinna , se non vado errato il Timer1 viene ricaricato con il valore 15536
quindi puoi togliere il WriteTimer1(15536) e scrivere:
TMR1H = 0xC3; //timer1 MSB register
TMR1L = 0x50; //timer1 LSB register
stessa cosa per l'altro timer, così facendo con mikroC non dovresti avere problemi.
Saluti
Andrea
Si prega Accedi o Crea un account a partecipare alla conversazione.
- alfa75
- Platinum Member
- Messaggi: 527
- Ringraziamenti ricevuti 86
alfa75 ha scritto: nel codice di Pinna , se non vado errato il Timer1 viene ricaricato con il valore 15536
quindi puoi togliere il WriteTimer1(15536) e scrivere:
TMR1H = 0xC3; //timer1 MSB register
TMR1L = 0x50; //timer1 LSB register
stessa cosa per l'altro timer, così facendo con mikroC non dovresti avere problemi.
Andrea
fin qua ci sono arrivato anchio.
Ma se si analizza il programma di pinna c'è scritto :
timer0 = (unsigned int)(65536 -(pulse * FACTOR));
la variabile pulse e il risultato della conversione ADC.
E in questo punto che non so gestire il problema è qua che non so come fare a trascrivere il valore di timer0 nei due registri in quanto non conosco il valore di pulse in quanto varia continuamente.
Massimo
Si prega Accedi o Crea un account a partecipare alla conversazione.
- mpeino
- Autore della discussione
- Elite Member
- Messaggi: 174
- Ringraziamenti ricevuti 2
Rendering Error in layout Message/Item: array_keys(): Argument #1 ($array) must be of type array, null given. Please enable debug mode for more information.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- alfa75
- Platinum Member
- Messaggi: 527
- Ringraziamenti ricevuti 86
Massimo
Si prega Accedi o Crea un account a partecipare alla conversazione.
- mpeino
- Autore della discussione
- Elite Member
- Messaggi: 174
- Ringraziamenti ricevuti 2
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.