| |
| | #1 (permalink) Top | |
| Adv Moderator Data registr.: 15-08-2007 Residenza: sto a Massa ma sono molto Positivo
Messaggi: 12.071
| Citazione:
Tu devi generare un impulso PWM con frequenza totale di 50Hz in base ad un impulso che ti arriva. Che i due impulsi inizino asseme non ti importa nulla, ne tantomeno importa al servo. Pertanto l'unica cosa che devi fare è: leggere l'impulso, calcolare la durata di quello da generare in base alla tua funzione di trasformazione e generare l'impulso in uscita. Non centrano nulla i ritardi o gli anticipi (credo sia la corretta definizione di "ritardo ancora più breve") In picbasic il tuo problema lo si risolve con ben 8 righe di codice. Esempio per aumentare del 20% le corse: while 1=1 a=pulsin(gpio.portain,1); if (a!=0) then b=((a-150)*1.2)+150; low gpio.portaout; pulsout(gpio.portaout, b,1); endif wend Alla fine non mi sembra così complesso... | |
| | |
| | #2 (permalink) Top | |
| User Data registr.: 19-07-2008 Residenza: catania
Messaggi: 978
| ok
scusami se uso terminologia marziana! appena ho tempo cerco di tradurre tutt oin termini di assembler ..comunque mi la tua osservazione coincide con la mia .. però detta meglio da te ovviamente.. a dopo Citazione:
| |
| | |
| | #3 (permalink) Top |
| User Data registr.: 19-07-2008 Residenza: catania
Messaggi: 978
| Problema !!!
ALLORA.. STUDIANDO E LEGGENDO DATASHEET COMPRESO.. APPRENDO CHE IL PWM NON SERVE E' SUFFICIENTE USARE IL MODULO TMR0 PERO PERO PERO.. C'E UN PROBLEMA CHE MI STA FACENDO GIRARE LE BAL.. OVVERO PRIMA DI OGNI COSA OCCORRE LEGGERE IL SEGNALE DALLA RICEVENTE... ECCO E MI SPIEGO, HO FATTO UNA SEPLICE ROUTINE CHE FUNZIONA SOLO SE USO UN TEST PER SERVER OVVERO QUEI DISPOSITIVI CHE GENERANO DEGLI IMPULSI UGUALI A QUELLI PROVENIENTI DA UNA RICEVENTE, CON IL POTENZIOMETRO SI PUO VARIARE LA POSISZIONE DEL SERVO FIN QUI SPETTACOLARE TUTTO OK... PERO SE USO LO STESSO CON UNA QUALUNQUE RICEVENTE.. KO!!! NIENTE DA FARE ELETTROENCEFALOGRAMMA PIATTO!!! CHE NE PENSATE? ECCO LA ROUTINE: ;----------------------------------------------------- ; This software read data fron Hitech receiver. ; For each pulse it's show value by led in binary mode ; the value 40 < COUNT < 207 ; ; software by Fausto Giudice ;----------------------------------------------------- PROCESSOR 16F628 RADIX DEC INCLUDE "P16F628.INC" __CONFIG 11110100010000B ;----------------------------------------------------- COUNT EQU 32 CL EQU 33 ;----------------------------------------------------- ORG 0 ; ; -------------------------------- ; SET ANALOG/DIGITAL INPUTS PORT A ; -------------------------------- ; MOVLW 7 ;QUESTA OPZIONE E' NECESSARIA SE SI VUOLE USARE PORTA COME INPUT MOVWF CMCON ;CMCON=7 set comperators off ; ; ---------------- ; INITIALIZE PORTS ; ---------------- ; BSF STATUS,RP0 ; ** BANK1 ** MOVLW b'00000000' MOVWF TRISB ; portB all pins output MOVLW b'11110100' MOVWF TRISA ; RB7-RB4 and RB1(RX)=input, others output BCF STATUS,RP0 ; ** BANK0 ** CLRF COUNT CLRF PORTB MAIN BTFSS PORTA,2 ; IF (bit 0 di PORTA è = 1) GOTO $-1 MOVLW 178 ; 1uS | MOVWF CL ; 1uS | 4uS GOTO $+1 ; 2uS | ****** ATTESA DI 0.9 mS ****** GOTO $+1 ; 2uS | DECFSZ CL,F ; 1uS | 5uS * (178 - 1) = 885uS + 4 + 2 = 891 uS circa GOTO $-2 ; 2uS | XX BTFSS PORTA,2 ; 2uS GOTO SHOW INCF COUNT,F ; attesa di 1uS GOTO XX ; attesa di 2uS totale 5uS SHOW MOVF COUNT,W MOVWF PORTB CLRF COUNT GOTO MAIN END |
| | |
| | #4 (permalink) Top | |
| User Data registr.: 19-07-2008 Residenza: catania
Messaggi: 978
| completo
non ho detto che l'output me lo faccio restituire sulla porta B con 8 Led che in binario mi offrono il numero del tempo a partire dal 1 mS, fino al secondo ovviamente il primo millisecondo lo faccio scorrere,, poi cominicio ad incrementare COUNT che incrementarà circa ogni 5 uS , Il fatto è che con la RX non legge nessun bit già fin dall'inizio!! quinidi non incrementa niente! ho provato anche la tecnica illustrata qui Regolatore giri. ma il risulktato è lo stesso.. ovviamente di questo suggerimento ho solo selezionato la parte che riguarda la lettura del segnale in arrivo dalla ricevente a dopo fausto Citazione:
| |
| | |
| | #5 (permalink) Top |
| User Data registr.: 21-01-2004 Residenza: Milano
Messaggi: 989
|
Deve funzionare... controlla di essere collegato sul pin giusto e con la massa del ricevitore collegata alla massa del micro; nei commenti hai scritto bit 0 di PORTB, ma tu testi il bit 2! visto che usi il 628 che ha anche il timer1, è più facile fare la lettura così: MAIN CLRF TMR1L CLRF TMR1H BTFSS PORTA,2 GOTO $-1 BSF T1CON,0 BTFSC PORTA,2 GOTO $-1 BCF T1CON,0 (valore dell'impulso in timer1) Se vuoi misurare solo dopo 1 mS, carichi il timer1 a -1000 (0xFC17) in modo che vada in overflow dopo 1ms e ricomincia a contare da zero. Michele
__________________ __________________________________________________ The worst day flying is better than the best day working. |
| | |
| | #6 (permalink) Top | |
| User Data registr.: 19-07-2008 Residenza: catania
Messaggi: 978
| risposta
ringrazio MSchiepp; ma ringrazio anche Juljila che anche se non scrive so che legge.. e il suo consiglio mi è parso molto utile in privato fermo restando la procedura scritta inizialmente, sembrerebbe funzionare qualcosa, ho messo nella ricevente 6V mentre sul 16F628 5V altrimenti andrebbe in fumo. Bene con una ricevente Hitec 40 MHz FUNZIONA!, anche se l'escursione è più corta , oscilla tra i 55 e i 191, mentre il servo test da 1 a 255 esatti, diciamo che il servo test ha una buona escursione. Detto questo però cambio ricevente passo ad una OPTTIMA 2,4GHz pur alimentandola con 6v niente. Per cui credo che la difficoltà stia nell'impedenza dei Pin dell'16F628 troppo alta da non permettere l'ingresso del segnale, insomma l' '1' lo legge come uno zero.... che fare? torno su MSchiepp: grazie per il suggerimento , tieni presente che i commenti sono copiati da altri sorgenti, per cui si trovano incollati senza aderenza alla vera istruzione! per le porte nessun problema conosco bene i registri TRISB e TRISA , per cui ..anzi adesso ho messo la DEFINE in modo che con una sola modifica posso cambiare la porta di ingresso , ho letto il tuo codice, ottimo, prenderò spunto di lavorare anche con timer1 visto che ha 2 byte anzichè uno, credo che per l'estensione possa essere utile. a dopo fausto Citazione:
| |
| | |
| | #7 (permalink) Top |
| User Data registr.: 19-07-2008 Residenza: catania
Messaggi: 978
| ok
salve a tutti ringraziandovi vi spiego un po come è andata, ho messo un 78L05 in cui l'uscita alimenta il PIC (5v) mentre l'ingresso con una tensione di 5,5 v alimenta la ricevente, funziona anche con la 2,4GHz, tutto bene . Adesso sicomme sono rompi pal.. continuo voglio l'output sul PC, bene, tutto ok per il servo test mentre nuovamente guai con la radio!! stavolta pur offrendo la corrente come con i led .. niente.. devo lavorare con le resistenze, come suggerito da jujila ecco la routine: MAIN BTFSS PULSEIN ; IF (bit 0 di PORTA è = 1) GOTO $-1 MOVLW 178 ; 1uS | MOVWF CL ; 1uS | 4uS GOTO $+1 ; 2uS | ****** ATTESA DI 0.9 mS ****** GOTO $+1 ; 2uS | DECFSZ CL,F ; 1uS | 5uS * (178 - 1) = 885uS + 4 + 2 = 891 uS circa GOTO $-2 ; 2uS | XX BTFSS PULSEIN ; 2uS GOTO SHOW INCF COUNT,F ; attesa di 1uS GOTO XX ; attesa di 2uS totale 5uS SHOW MOVF COUNT,W CALL send CLRF COUNT GOTO MAIN |
| | |
![]() |
| Bookmarks |
| |
Discussioni simili | ||||
| Discussione | Autore discussione | Forum | Commenti | Ultimo Commento |
| Aumentare Range TX-RX | Katana13 | Radiocomandi | 12 | 18 marzo 10 18:00 |
| Aumentare la velocità | imperatore82. | Aeromodellismo Volo Elettrico | 1 | 04 novembre 09 14:10 |
| Aumentare la spinta | twentynine | Aeromodellismo Ventole Intubate | 18 | 18 gennaio 09 20:19 |
| Aumentare % miscela | truffolo | Automodellismo Mot. Scoppio On-Road | 10 | 02 ottobre 07 11:24 |
| eco 8 - aumentare il passo | xfile69 | Elimodellismo Principianti | 0 | 19 agosto 06 23:51 |