Torna indietro   BaroneRosso.it - Forum Modellismo > Elettronica > Circuiti Elettronici


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 31 ottobre 10, 23:00   #1 (permalink)  Top
Adv Moderator
 
L'avatar di romoloman
 
Data registr.: 15-08-2007
Residenza: sto a Massa ma sono molto Positivo
Messaggi: 12.071
Citazione:
Originalmente inviato da faustog_2 Visualizza messaggio
il problema è che se fosse solo leggere un impulso e poi come risposta sommare un ritardo opportuno.. il discorso era già risolto... ma in caso di impulsi al di sotto dei 1500 uS occorre avere un ritardo ancora più breve... quindi come intuito qui da tutti IMPOSSIBILE.. per questo si può optare nel rielaborare il ritardo durante la pausa dei 20 - 30 millisecondo e quindi dare risposta opportuna diminuendo il ritardo. tutto qui
Scusami Fausto, ma forse se tu usassi una teminologia opportuna ti si capirebbe meglio.
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...
romoloman non è collegato   Rispondi citando
Vecchio 02 novembre 10, 10:38   #2 (permalink)  Top
User
 
L'avatar di faustog_2
 
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:
Originalmente inviato da romoloman Visualizza messaggio
Scusami Fausto, ma forse se tu usassi una teminologia opportuna ti si capirebbe meglio.
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...
faustog_2 non è collegato   Rispondi citando
Vecchio 29 novembre 10, 12:29   #3 (permalink)  Top
User
 
L'avatar di faustog_2
 
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
faustog_2 non è collegato   Rispondi citando
Vecchio 29 novembre 10, 12:52   #4 (permalink)  Top
User
 
L'avatar di faustog_2
 
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:
Originalmente inviato da faustog_2 Visualizza messaggio
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
faustog_2 non è collegato   Rispondi citando
Vecchio 29 novembre 10, 20:34   #5 (permalink)  Top
User
 
L'avatar di MSchiepp
 
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.
MSchiepp non è collegato   Rispondi citando
Vecchio 30 novembre 10, 14:12   #6 (permalink)  Top
User
 
L'avatar di faustog_2
 
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:
Originalmente inviato da MSchiepp Visualizza messaggio
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
faustog_2 non è collegato   Rispondi citando
Vecchio 01 dicembre 10, 01:11   #7 (permalink)  Top
User
 
L'avatar di faustog_2
 
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
faustog_2 non è collegato   Rispondi citando
Rispondi

Bookmarks




Regole di scrittura
Non puoi creare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è Attivato
Le faccine sono Attivato
Il codice [IMG] è Attivato
Il codice HTML è Disattivato
Trackbacks è Disattivato
Pingbacks è Disattivato
Refbacks è Disattivato


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



Tutti gli orari sono GMT +2. Adesso sono le 08:37.


Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2019 - K-Bits P.I. 09395831002