Vai al contenuto
PLC Forum


moduli aurel


Messaggi consigliati

Inserito:

Iniziamo dall'inizio:

Vorrei progetttare un telecontrollo con dei PIC,sto usando "visual parsic" vorrei sfruttare i moduli UART (rs232) all'interno del programma in modo da semplificarmi la vita,gia' l'ho usato via cavo e va una bellezza,volevo ampliare il progetto via RADIO.

Volevo sapere quale dei moduli AUREL usare:

Ricercando per la rete ho trovato che i moduli

TX-DFM 5V

RX-DFM 5V

gia sono abilitati a trasmettere i dati rs232 senza nessun accorgimento ma realizzare un ricetrasmettitore in questo modo viene troppo caro, perche tali moduli sono predisposti per alta velocita 19200 che a me siceramente non serve,volevo usare altri moduli dell'aurel piu' economici,come ad esempio in tale schema trovato in rete.

Secondo voi potrebbe funzionare?? visto che tale scema e un collegameto fra due pc!!!

MDMRF2.gif

NOTE ALLEGATE A TALE SCHEMA su un altro sito erano:

senza utilizzare gli IC della Maxim

Intanto chiarisco che non occorre emulare via hardware nessun protocollo di comunicazione in quanto a questo provvedono già i personal stessi ,ma si tratterebbe invece di effettuare la gestione dei criteri di interfaccia a livello locale sulle rs232 dei due PC. ,nei quali se non vengono effettuate le necessarie richiusure dei criteri di interfaccia non saranno mai abilitati ad inviare o ricevere dati.*

I criteri da richiudere sono [105 con 106 e con 109] , [ 108 con 107]

Mentre i criteri 103 e 104 rappresentano rispettivamente TX DATA e RX DATA

Colgo quindi l'occasione x pubblicare un semplicissimo Modem in RadioFrequenza a 433 Mhz che però personalmente non ho ancora avuto il tempo di collaudare ,anzi sarei grato se qualcuno volesse farlo e poi rendesse noti i RISULTATI.

l'unica incertezza in merito risulta data dal fatto che l'isteresi dei modulini aurel sui segnali trattati non rende possibile la trasmissione di lunghe sequenze di bit ad uno, ostacolo aggirabile con precisione utilizzando x la codifica una ram tampone e un microcontrollore che introduce delle violazioni nella parola da trasmettere x spezzare la componente continua (ripeto lunghe sequenze di bit ad 1). Quest' ultimo argomento se vi interessa verrà probabilmente trattato più avanti.

Comunque questo fatto non dovrebbe pregiudicare l'esito del funzionamento (sopratutto a velocita limitate) visto che le sequenze omogenee nel codice ascii non sono frequentissime, e comunque vale la pena di tentare.

Si utilizzano appunto i modulini dell'Aurel. la cui portata e veramente notevole visto che il tx ibrido ha ben 0,4 W a 12v.

Il baud rate max ammesso dipende dalle caratteristiche di isteresi del modulino stesso circa 4800 b/sec MAX


Inserita:

In pratica sarei interessato a quali moduli Aurel (possibilmente i piu' econmomici)usare per effettuare il collegameto seriale fra pic e PC o fra due pic......

cosi' mi9 evitate di spendere soldi inutili

Inserita:

E' solo un dubbio.

La frequenza libera per usi di controllo industriali fino a 10 mW. per connessioni non continuate nel tempo (in termini di duty cicle, non di caduta di lineaa) non e' la 864 MHz. ?

Mi pare che la 433 vada in disuso.

Inserita:

Guarda caro piero non ne ho idea, semplicemente perche' io sono un privato e realizzo circuiti alivello amatoriale e a scopo didattico ezssendo iscritto a Ingegneria metto in pratica quello studiato,rimando a persone piuì' esperte il tuo dubbio o a persone che lavorano per industrie.

comunque rinnovo il mio appello....

Inserita:

Almeno consigliatemi solo quali moduli acquistare senza postarmi lo schema ... poi gli esperimenti li faccio da me

perche' questo fine settimana volevo ordinarli, altrimenti domani vado via in facolta'........ ;)

  • 2 weeks later...
ifachsoftware
Inserita: (modificato)

Io ho realizzato di recente un telecomando tra 2 PIC con il TX5M50PL06 e il RX4M50FM60 (Tx/Rx a 433.92Mhz) , sono riuscito a pilotarli fino a Max. 4800 Baud e tirano fino ad 1Km in aria libera.

L'unico accorgimento e' che per pilotarli devi 'scaldare' modulo inviando alcuni caratteri non significativi , prima del pacchetto vero che spedivo per 3 volte per essere sicuro di averlo inviato

Il Tx ha il Pin 1,4,13 a Massa , nel Pin 2 Entro con il dato Tx , Nel pin 15 entro col +5V,Nel Pin 11 colleghi l'antenna.

L'Rx ha il Pin 1,15 a +5V , i Pin 2,7,11 a Massa , il 13 Libero e il PIn 14 da dove esce il segnale Rx, nel Pin 3 colleghi l'antenna.

Tali moduli sono della Aurel (personalmente li ho acquistati alla futura http://www.futuranet.it , ho visto che sul numero di febbraio della futura c'e' un progetto con un modulo che Invia e Riceve direttamente sullo stesso modulino.

Ciao :)

Modificato: da ifachsoftware
Gabriele Corrieri
Inserita:
ifachsoftware+30 Mar 2003, 10:46 AM-->
(ifachsoftware @ 30 Mar 2003, 10:46 AM)

Ciao Claudio,

come mai ciò? Come te ne sei accorto? Che spiegazioni ti sei dato o che ti ha dato Futura o Aurel stessa?

Ciao

ifachsoftware
Inserita:

Il problema e' che il modulo probabilmente per modulare correttamente necessita di un piccolo tempo nel passare da uno stadio di inattivita' , cosa che se trasmetti in maniera continuativa non hai necessita' di fare se non all'accensione (cio' e' cio' che mi e' stato consigliato dalla Futura e cosa verificata personalmente sul campo).

Non so se cio' e' dovuto solo al tipo di modulo usato (Non e' specifico per la trasmissione dei dati , come altri a catalogo) , pero' come modulo ha la caratteristica di 'tirare' fino ad un Km anche se a max. 4800baud , il che non mi sembra male.

Naturalmente se i dati da spedire sono molti e avete bisogno di un controllo bidirezionale e' meglio che vi indirizziate sugli specifici moduli della Aurel.

Naturalmente se usate altri moduli fateci sapere come e' andata e soprattutto se necessano la 'scaldatina' iniziale.

Ciao :)

Inserita:

ciao ifachsoftwar

per la tiratura fino a un km che antenne hai usato?

ciao luciano

ifachsoftware
Inserita:

Degli spezzoni di cavo di circa 15 cm , comunque puoi anche collegare delle antenne accordate un po' piu' performanti.

Ciao :)

Inserita:

siccome io uso le n°2 halan 43 n° 2 modem radio, n° 2 antenne omnidirezionale da 1,5 metri...

devo fare qualche prova con questi modulini ... forse riusciro' a risparmiare un po'

Inserita:

caro ifachsoftware ho acquistato il 433sawbooTx e rxnb-ce a 433.92 della aurel sto faccendo delle prove di tx-rx fra due pic a 1200 baund senza checksum. La prova consiste nel trasmettere un conteggio di un pic sulla'altro pic,ma vedo che arrivano solo numeri sballati. Mi consigli anche a 1200 di mandare dei byte meno significativi,prima di trasmettere il conteggio?

Inserita:

allora riassumendo le prove......

1)sto provando adesso a trasmettere un numero fisso tra due pic via seriale a 1200 , la trasmissione avviene con successo di rado,significa che visualizzo numeri casuali sul display. Come ho potuto notare dipende molto dalla posizione del trasmettirore. Ho usate antenne apposite per i 433mhz accordate. Sara che la parte trasmittente non è in un box mettalico? Ed va ad interferire con il pic che genera il numero fisso da tramsettere...?

Se è cosi mi conviene dividere la parte trasmittente dal circuito del pic e schermarlo.

ifachsoftware
Inserita:
Mi consigli anche a 1200 di mandare dei byte meno significativi,prima di trasmettere il conteggio? 
Inserita:

scusa ifach ...approfitto per chiederti che compilatore c usi?

grazie ciao

Inserita:

Ti ringrazio ifachsoftware del listato, provero a d usare il tuo listato e vedo se raggiungo qualcosa.... fin adesso ho anche scatolato il rx e il tx in contenitori metallici ma niente, la ricezione dipende molto da come misposta nella stanza devo solo a provare a scermare anche il pic. Ti faccio sapere

GRazie dell'aiuto......

P.s.: fin ora avevo usato il listato di visual parsic che realizza gia' lui una connesione seriale a 1200 fra due pic,ma come ti dicevo non ho raggiunto nessun risultato.

tx di numero 15 con 16f628 a 1200 senza cheksum

; Source created with Parsic Version 3.x

; at : 06/04/2003 21.29.51

; Project File : NONAME.PIC

; Project Version : 1.0.0

; Created : 06/04/2003 21.15.21

; Last change : 06/04/2003 21.15.21

PROCESSOR 16F628

INCLUDE P16F628.INC

RADIX DEC

__IDLOCS H'0100'

__CONFIG _CP_OFF & _PWRTE_ON & _WDT_ON & _BODEN_ON & _INTRC_OSC_NOCLKOUT & _LVP_OFF & _MCLRE_ON

; Diverses

ZERO EQU Z ; ZERO-Flag

CARRY EQU C ; CARRY-Flag

; Variable

UD1_FD = 32 ; located in Bank 0

S1 = 33 ; located in Bank 0

UA1RSFLAG = 34 ; located in Bank 0

TR1 = 35 ; located in Bank 0

TR1_HI = 36 ; located in Bank 0

S0 = 37 ; located in Bank 0

UA1OUTBUF = 38 ; located in Bank 0

UA1OUTBUF1 = 39 ; located in Bank 0

UA1OUTBUF2 = 40 ; located in Bank 0

RAM = 41 ; located in Bank 0

SYS_WSAV = 112 ; located in Bank 0, 1, 2, 3

SYS_SSAV = 113 ; located in Bank 0, 1, 2, 3

ERRORLEVEL -302 ; disable warning (Bankswitching)

ERRORLEVEL -306 ; disable warning (Pageswitching)

;****************************************

;Programmanfang

;****************************************

ORG 0

CLRF STATUS ; switch to RAM-Bank 0

GOTO SYS_INIT

NOP

NOP

;****************************************

;Interrupt-Adress

;****************************************

MOVWF SYS_WSAV ; save register

SWAPF STATUS,W

CLRF STATUS ; bank 0

MOVWF SYS_SSAV

;***************************************************

; UART -> UA1

;***************************************************

;---------------------------------------------------------

UA1CHKTX

BTFSS PIR1,TXIF ; send b†te ?

GOTO UA1ENDINT ; no

MOVFW UA1OUTBUF+1 ; all transmitted ?

BTFSC STATUS,ZERO

GOTO UA1TXINT1

ERRORLEVEL -312

BANKISEL UA1OUTBUF ; FILE INDIREKT

ERRORLEVEL +312

MOVFW UA1OUTBUF ; pointer

INCF UA1OUTBUF,F ; pointer+1

MOVWF FSR

MOVFW INDF ; data

MOVWF TXREG ; Transmit Register

DECF UA1OUTBUF+1,F ; length-1

GOTO EXITINT ; that's all

UA1TXINT1

BSF STATUS,RP0 ; Bank 1

BCF STATUS,RP1 ; Bank 1

BTFSS TXSTA,TRMT ; last b†te transmitted ?

GOTO EXITINT ; no

BCF TXSTA,TXEN ; transmitter off

BCF STATUS,RP0 ; Bank 0

BSF UA1RSFLAG,2 ; read†

GOTO EXITINT

UA1ENDINT

BCF INTCON,T0IF ; Interrupt quitieren

BCF STATUS,RP0 ; Bank 0

BCF STATUS,RP1 ; Bank 0

INCFSZ TR1,F

GOTO SYS_INT_LABEL_0

INCF TR1_HI,F

SYS_INT_LABEL_0

EXITINT

SWAPF SYS_SSAV,W ; Register zurck

MOVWF STATUS

SWAPF SYS_WSAV,F

SWAPF SYS_WSAV,W

RETFIE ; RETurn From Interrupt and Enable GIE

;****************************************

; Subroutines

;****************************************

;****************************************

;Initialisierung

;****************************************

SYS_INIT

MOVLW B'00100000'

MOVWF INTCON

; Ausgangs-Pegel setzen, bevor die Richtung gesetzt wird

BCF STATUS,RP0 ; Bank 0

BCF STATUS,RP1 ; Bank 0

MOVLW B'00000000'

MOVWF PORTA

MOVLW B'00000100'

MOVWF PORTB

MOVLW 143

BSF STATUS,RP0 ; Bank 1

MOVWF OPTION_REG

; Richtung setzen

MOVLW B'11111111'

MOVWF TRISA

MOVLW B'11111011'

MOVWF TRISB

BCF STATUS,RP0 ; Bank 0

MOVLW 7 ; Comparators off

MOVWF CMCON

; init vars

; Clear RAM

BCF STATUS,IRP

MOVLW 32

MOVWF FSR

CR1

CLRF INDF

INCF FSR,F

BTFSS FSR,7

GOTO CR1

BSF FSR,5

CR2

CLRF INDF

INCF FSR,F

MOVLW H'F0'

SUBWF FSR,W

BTFSS STATUS,ZERO

GOTO CR2

BSF STATUS,IRP

MOVLW 32

MOVWF FSR

CR3

CLRF INDF

INCF FSR,F

MOVLW H'50'

SUBWF FSR,W

BTFSS STATUS,ZERO

GOTO CR3

MOVLW B'00000100'

BCF STATUS,RP0 ; Bank 0

BCF STATUS,RP1 ; Bank 0

MOVWF S1

;*****************************************

; initalisize UA1

;*****************************************

MOVLW B'10010000' ; serial enable,8-bit,continous-enable

MOVWF RCSTA

BSF STATUS,RP0 ; Bank 1

MOVLW 207

MOVWF SPBRG ; BAUDRATE GENERATOR

MOVLW B'00000100' ; 8-BIt,TRANSMIT DISABLED,ASYNCHRON,BRGH=1=HIGH SPEED

MOVWF TXSTA

BSF PIE1,TXIE ; enable INTERRUPT for transmit

BSF INTCON,PEIE ; PERIPHERIE INT ENABLE

BCF STATUS,RP0 ; Bank 0

CLRF TMR0

BCF INTCON,T0IF

BSF INTCON,GIE ; Interrupt freigeben

;**********************************

;******* Haupt-Programm ***********

;**********************************

MAIN

CLRWDT

; Progetto Achy

;***************************************************

; UDATA -> UD1

;***************************************************

BCF STATUS,RP0 ; Bank 0

BCF STATUS,RP1 ; Bank 0

BTFSC S1,1 ; active

GOTO LABEL_UD1_1 ; †es

; test positive edge

BTFSS S1,0

GOTO LABEL_UD1_SETFD

BTFSC UD1_FD,0

GOTO LABEL_UD1_SETFD

BSF UD1_FD,0

BCF UA1RSFLAG,2 ; set not read†

BSF S1,1 ; active

MOVLW LOW UA1OUTBUF+2 ; set pointer (ADRESS)

MOVWF UA1OUTBUF

MOVLW 1 ; 1 b†tes

MOVWF UA1OUTBUF+1

BCF INTCON,GIE ; disable interrupts

BTFSC INTCON,GIE ; disabled ?

GOTO $-2 ; no

MOVFW S0

MOVWF UA1OUTBUF+2

BSF STATUS,RP0 ; Bank 1

BSF TXSTA,TXEN

BSF INTCON,GIE ; enable interrupts

LABEL_UD1_1

BCF STATUS,RP0 ; Bank 0

BCF STATUS,RP1 ; Bank 0

BTFSS UA1RSFLAG,2 ; transmit read† ?

GOTO LABEL_UD1_2 ; no

BCF S1,1 ; not active

LABEL_UD1_2

LABEL_UD1_SETFD

; test negative edge

BCF STATUS,RP0 ; Bank 0

BCF STATUS,RP1 ; Bank 0

BTFSC S1,0

GOTO LABEL_UD1_EXIT

BCF UD1_FD,0

LABEL_UD1_EXIT

; Progetto Achy

;***************************************************

; Timer -> TR1

;***************************************************

MOVLW 15 ; Test auf >=

SUBWF TR1_HI,W ;F-W -> W

BTFSS STATUS,ZERO

GOTO LABEL_TR1_CHECK

MOVLW 66

SUBWF TR1,W ;F-W -> W

LABEL_TR1_CHECK

BTFSS STATUS,CARRY

GOTO LABEL_TR1_ENDE

LABEL_TR1_RESET

MOVLW 15 ; Test auf >=

SUBWF TR1_HI,F ;F-W -> F

MOVLW 66

SUBWF TR1,F ;F-W -> F

BTFSS STATUS,CARRY

DECF TR1_HI,F

LABEL_TR1_SET ; toggel output

BTFSC S1,0

GOTO LABEL_TR1_CLR

BSF S1,0

GOTO LABEL_TR1_ENDE

LABEL_TR1_CLR

BCF S1,0

LABEL_TR1_ENDE

; Progetto Achy

; Progetto Achy

; Progetto Achy

;***************************************************

; VCC

;***************************************************

BCF STATUS,RP0 ; Bank 0

BCF STATUS,RP1 ; Bank 0

BSF S1,2 ; immer High

; Progetto Achy

;***************************************************

; GND

;***************************************************

BCF S1,3 ; immer Low

; Progetto Achy

; Progetto Achy

; Progetto Achy

; Progetto Achy

; Progetto Achy

; Progetto Achy

; Progetto Achy

; Progetto Achy

; Progetto Achy

; Progetto Achy

; Progetto Achy

; Progetto Achy

;***************************************************

; Verteiler -> BV1

;***************************************************

MOVLW 0

BTFSC S1,2 ; IN0

IORLW 1

BTFSC S1,2 ; IN1

IORLW 2

BTFSC S1,2 ; IN2

IORLW 4

BTFSC S1,2 ; IN3

IORLW 8

BTFSC S1,3 ; IN4

IORLW 16

BTFSC S1,3 ; IN5

IORLW 32

BTFSC S1,3 ; IN6

IORLW 64

BTFSC S1,3 ; IN7

IORLW 128

MOVWF S0 ; OUT

; Progetto Achy

; Progetto Achy

; Progetto Achy

; Progetto Achy

;****************************************

GOTO MAIN

END

rx 16f877 a 1200 s.c

; Source created with Parsic Version 3.x

; at : 29/03/2003 20.14.14

; Project File : NONAME.PIC

; Project Version : 1.0.0

; Created : 29/03/2003 20.08.53

; Last change : 29/03/2003 20.08.53

PROCESSOR 16F877

INCLUDE P16F877.INC

RADIX DEC

__IDLOCS H'0100'

__CONFIG _CP_OFF & _PWRTE_ON & _WDT_ON & _BODEN_ON & _HS_OSC & _LVP_OFF & _CPD_OFF & _DEBUG_OFF

; Diverses

ZERO EQU Z ; ZERO-Flag

CARRY EQU C ; CARRY-Flag

; Variable

UD1_FD = 32 ; located in Bank 0

S0 = 33 ; located in Bank 0

TR1 = 34 ; located in Bank 0

TR1_HI = 35 ; located in Bank 0

DATO = 36 ; located in Bank 0

UA1RSFLAG = 37 ; located in Bank 0

LT1_FD = 38 ; located in Bank 0

UA1INBUF = 39 ; located in Bank 0

UA1INBUF1 = 40 ; located in Bank 0

UA1INBUF2 = 41 ; located in Bank 0

RAM = 42 ; located in Bank 0

SYS_WSAV = 115 ; located in Bank 0, 1, 2, 3

SYS_SSAV = 116 ; located in Bank 0, 1, 2, 3

SYS_PSAV = 117 ; located in Bank 0, 1, 2, 3

SYS_TMP1 = 118 ; located in Bank 0, 1, 2, 3

SYS_TMP2 = 119 ; located in Bank 0, 1, 2, 3

SYS_TMP3 = 120 ; located in Bank 0, 1, 2, 3

SYS_TMP4 = 121 ; located in Bank 0, 1, 2, 3

SYS_TMP5 = 122 ; located in Bank 0, 1, 2, 3

SYS_TMP6 = 123 ; located in Bank 0, 1, 2, 3

SYS_TMP9 = 124 ; located in Bank 0, 1, 2, 3

SYS_TMP10 = 125 ; located in Bank 0, 1, 2, 3

ERRORLEVEL -302 ; disable warning (Bankswitching)

ERRORLEVEL -306 ; disable warning (Pageswitching)

;****************************************

;Programmanfang

;****************************************

ORG 0

CLRF STATUS ; switch to RAM-Bank 0

MOVLW HIGH SYS_INIT ; set page

MOVWF PCLATH

GOTO SYS_INIT

;****************************************

;Interrupt-Adress

;****************************************

MOVWF SYS_WSAV ; save register

SWAPF STATUS,W

CLRF STATUS ; bank 0

MOVWF SYS_SSAV

MOVFW PCLATH

MOVWF SYS_PSAV

CLRF PCLATH

;***************************************************

; UART -> UA1

;***************************************************

BTFSS PIR1,RCIF ; b†te received?

GOTO UA1ENDINT ; no

MOVFW RCSTA ; error ?

ANDLW B'110'

BTFSS STATUS,ZERO

GOTO UA1RCERROR ; †es

MOVFW UA1INBUF+1 ; all received ?

BTFSC STATUS,ZERO ; length =0 ?

GOTO UA1RCINT2 ; †es

ERRORLEVEL -312

BANKISEL UA1INBUF

ERRORLEVEL +312

MOVFW UA1INBUF

MOVWF FSR

INCF UA1INBUF,F ; pointer+1

MOVFW RCREG ; store

MOVWF INDF

DECFSZ UA1INBUF+1,F ; length-1

GOTO EXITINT

BSF UA1RSFLAG,0 ; read†

GOTO EXITINT

UA1RCINT2

BCF STATUS,RP0 ; Bank 0

BCF STATUS,RP1 ; Bank 0

MOVFW RCREG ; trash

GOTO EXITINT

UA1RCERROR

MOVFW RCREG ; reset error status

BCF RCSTA,CREN

BSF RCSTA,CREN

BSF UA1RSFLAG,1 ; error

GOTO EXITINT

;---------------------------------------------------------

UA1ENDINT

BCF INTCON,T0IF ; Interrupt quitieren

BCF STATUS,RP0 ; Bank 0

BCF STATUS,RP1 ; Bank 0

INCFSZ TR1,F

GOTO SYS_INT_LABEL_0

INCF TR1_HI,F

SYS_INT_LABEL_0

EXITINT

MOVFW SYS_PSAV

MOVWF PCLATH

SWAPF SYS_SSAV,W ; Register zurck

MOVWF STATUS

SWAPF SYS_WSAV,F

SWAPF SYS_WSAV,W

RETFIE ; RETurn From Interrupt and Enable GIE

;****************************************

; Subroutines

;****************************************

;***************************************************

; Subroutines for LB1

;***************************************************

LCD_LB1_INIT

BCF STATUS,RP0 ; Bank 0

BCF STATUS,RP1 ; Bank 0

BCF PORTD,4 ; ir-register

LCD_LB1_L1

CALL LCD_LB1_OUT4

CLRWDT

DECFSZ SYS_TMP1,F

GOTO LCD_LB1_L1

MOVFW PORTD

ANDLW H'F0'

IORLW B'0011' ; Function Set

MOVWF PORTD

BSF PORTD,5 ; write

GOTO $+1

BCF PORTD,5

BSF SYS_TMP1,5 ; wait

LCD_LB1_L2

CALL LCD_LB1_OUT4

CLRWDT

DECFSZ SYS_TMP1,F

GOTO LCD_LB1_L2

BSF PORTD,5 ; write

GOTO $+1

BCF PORTD,5

CALL LCD_LB1_OUT4

BSF PORTD,5 ; write

GOTO $+1

BCF PORTD,5

CALL LCD_LB1_OUT4

BCF PORTD,0 ; 4-Bit Interface

GOTO $+1

BSF PORTD,5 ; write

GOTO $+1

BCF PORTD,5

CALL LCD_LB1_OUT4

MOVLW B'00101000' ; Function Set 4-Bit,2-Lines

CALL LCD_LB1_OUT

MOVLW B'00001100' ; Displa† on, Cursor off, Blink off

CALL LCD_LB1_OUT

MOVLW B'00000110' ; Entr†mode set

CALL LCD_LB1_OUT

LCD_LB1_CLR

BCF STATUS,RP0 ; Bank 0

BCF STATUS,RP1 ; Bank 0

BCF PORTD,4 ; ir-register

MOVLW B'00000001' ; Displa† clear

CALL LCD_LB1_OUT

BSF SYS_TMP1,5 ; wait

LCD_LB1_L3

CALL LCD_LB1_OUT4

CLRWDT

DECFSZ SYS_TMP1,F

GOTO LCD_LB1_L3

GOTO LCD_LB1_OUT4

;***************************************************

LCD_LB1_GOTOXY

BCF STATUS,RP0 ; Bank 0

BCF STATUS,RP1 ; Bank 0

BCF PORTD,4 ; ir-register

MOVLW H'40'

BTFSC SYS_TMP2,0 ; Ypos

ADDWF SYS_TMP1,F

BSF SYS_TMP1,7 ; select dd-ram

GOTO LCD_LB1_OUT1

;***************************************************

LCD_LB1_WRITESTR

BCF STATUS,RP0 ; Bank 0

BCF STATUS,RP1 ; Bank 0

BSF PORTD,4 ; dd-ram

LCD_LB1_WRITESTR1

CALL LCD_LB1_CHAROUT

BSF INTCON,GIE

ANDLW H'FF' ; last is zero

BTFSC STATUS,ZERO

RETURN

MOVWF SYS_TMP1

MOVLW HIGH LCD_LB1_OUT1 ; set page

MOVWF PCLATH

CLRWDT

CALL LCD_LB1_OUT1

INCFSZ SYS_TMP4,F ; next char

GOTO LCD_LB1_WRITESTR1

INCF SYS_TMP5,F ; next page

GOTO LCD_LB1_WRITESTR1

LCD_LB1_CHAROUT

BCF INTCON,GIE

MOVFW SYS_TMP5

MOVWF PCLATH

MOVFW SYS_TMP4

MOVWF PCL

;***************************************************

LCD_LB1_DEZO10000

MOVLW LOW 10000

MOVWF SYS_TMP1

MOVLW HIGH 10000

MOVWF SYS_TMP2

CALL LCD_LB1_CONVERTDEZ

MOVF SYS_TMP9,F

BTFSS STATUS,ZERO

GOTO LCD_LB1_DEZO1000

CALL LCD_LB1_CHECKNULL

LCD_LB1_DEZO1000

MOVLW LOW 1000

MOVWF SYS_TMP1

MOVLW HIGH 1000

MOVWF SYS_TMP2

CALL LCD_LB1_CONVERTDEZ

MOVF SYS_TMP9,F

BTFSS STATUS,ZERO

GOTO LCD_LB1_DEZO100

CALL LCD_LB1_CHECKNULL

LCD_LB1_DEZO100

MOVLW LOW 100

MOVWF SYS_TMP1

CLRF SYS_TMP2

CALL LCD_LB1_CONVERTDEZ

MOVF SYS_TMP9,F

BTFSS STATUS,ZERO

GOTO LCD_LB1_DEZO10

CALL LCD_LB1_CHECKNULL

LCD_LB1_DEZO10

MOVLW LOW 10

MOVWF SYS_TMP1

CLRF SYS_TMP2

CALL LCD_LB1_CONVERTDEZ

MOVF SYS_TMP9,F

BTFSS STATUS,ZERO

GOTO LCD_LB1_DEZO1

CALL LCD_LB1_CHECKNULL

LCD_LB1_DEZO1

MOVLW 48

ADDWF SYS_TMP4,W

GOTO LCD_LB1_WRITECHAR

;***************************************************

LCD_LB1_CONVERTDEZ

MOVF SYS_TMP9,F

BTFSS STATUS,ZERO

DECF SYS_TMP9,F

CLRF SYS_TMP6

LCD_LB1_CONVERTDEZ2

INCF SYS_TMP6,F

MOVFW SYS_TMP1

SUBWF SYS_TMP4,F

MOVFW SYS_TMP2

BTFSS STATUS,CARRY

INCFSZ SYS_TMP2,W

SUBWF SYS_TMP5,F

BTFSC STATUS,CARRY

GOTO LCD_LB1_CONVERTDEZ2

MOVFW SYS_TMP2

ADDWF SYS_TMP5,F

MOVFW SYS_TMP1

ADDWF SYS_TMP4,F

BTFSC STATUS,CARRY

INCF SYS_TMP5,F

DECF SYS_TMP6,W

BTFSS STATUS,ZERO

BSF SYS_TMP10,0

RETURN

;***************************************************

LCD_LB1_CONVERTHEX

ANDLW 15

MOVWF SYS_TMP1

MOVLW 48

ADDWF SYS_TMP1,F

MOVLW 58

SUBWF SYS_TMP1,W

BTFSS STATUS,CARRY

GOTO $+3

MOVLW 7

ADDWF SYS_TMP1,F

MOVFW SYS_TMP1

;***************************************************

LCD_LB1_WRITECHAR

BCF STATUS,RP0 ; Bank 0

BCF STATUS,RP1 ; Bank 0

BSF PORTD,4 ; dd-ram

;***************************************************

LCD_LB1_OUT

MOVWF SYS_TMP1 ; store

LCD_LB1_OUT1

CLRF SYS_TMP3 ; LCDWriteStr (first nibble)

LCD_LB1_OUT2

SWAPF SYS_TMP1,W ;high nibble

LCD_LB1_OUT3

ANDLW H'0F' ; mask

MOVWF SYS_TMP2 ; store

BCF STATUS,RP0 ; Bank 0

BCF STATUS,RP1 ; Bank 0

MOVFW PORTD ; load port

ANDLW H'F0' ; mask

IORWF SYS_TMP2,W ; add cmd

MOVWF PORTD ; out

BSF PORTD,5 ; E high

GOTO $+1

BCF PORTD,5 ; E low

BTFSC SYS_TMP3,7 ; read† ?

GOTO LCD_LB1_OUT4 ; †es

BSF SYS_TMP3,7 ; second nibble

MOVFW SYS_TMP1

GOTO LCD_LB1_OUT3 ; next nibble

LCD_LB1_OUT4

MOVLW 240

MOVWF SYS_TMP3

LCD_LB1_OUTV

DECFSZ SYS_TMP3,F

GOTO LCD_LB1_OUTV

RETURN

;***************************************************

LCD_LB1_CHECKNULL

BTFSS STATUS,ZERO

DECF SYS_TMP9,F

MOVWF SYS_TMP1

BTFSS STATUS,ZERO

BSF SYS_TMP10,0

MOVLW 48

BTFSC SYS_TMP10,0

ADDWF SYS_TMP1,f

MOVLW 32

BTFSS SYS_TMP10,0

ADDWF SYS_TMP1,F

MOVFW SYS_TMP1

GOTO LCD_LB1_WRITECHAR

; 00F3

;****************************************

;Initialisierung

;****************************************

SYS_INIT

MOVLW B'00100000'

MOVWF INTCON

; Ausgangs-Pegel setzen, bevor die Richtung gesetzt wird

BCF STATUS,RP0 ; Bank 0

BCF STATUS,RP1 ; Bank 0

MOVLW B'00000000'

MOVWF PORTA

MOVLW B'00000000'

MOVWF PORTB

MOVLW B'01000000'

MOVWF PORTC

MOVLW B'00000000'

MOVWF PORTD

MOVLW B'00000000'

MOVWF PORTE

MOVLW 143

BSF STATUS,RP0 ; Bank 1

MOVWF OPTION_REG

MOVLW 6 ; all Digital

MOVWF ADCON1

; Richtung setzen

MOVLW B'11111111'

MOVWF TRISA

MOVLW B'11111111'

MOVWF TRISB

MOVLW B'10111111'

MOVWF TRISC

MOVLW B'11000000'

MOVWF TRISD

MOVLW B'00000111'

MOVWF TRISE

; init vars

; Clear RAM

BCF STATUS,IRP

MOVLW 32

MOVWF FSR

CR1

CLRF INDF

INCF FSR,F

BTFSS FSR,7

GOTO CR1

BSF FSR,5

CR2

CLRF INDF

INCF FSR,F

MOVLW H'F0'

SUBWF FSR,W

BTFSS STATUS,ZERO

GOTO CR2

BSF STATUS,IRP

MOVLW 16

MOVWF FSR

CR3

CLRF INDF

INCF FSR,F

MOVLW H'70'

SUBWF FSR,W

BTFSS STATUS,ZERO

GOTO CR3

MOVLW 144

MOVWF FSR

CR4

CLRF INDF

INCF FSR,F

MOVLW H'F0'

SUBWF FSR,W

BTFSS STATUS,ZERO

GOTO CR4

;*****************************************

; initalisize UA1

;*****************************************

BCF STATUS,RP0 ; Bank 0

BCF STATUS,RP1 ; Bank 0

MOVLW B'10010000' ; serial enable,8-bit,continous-enable

MOVWF RCSTA

BSF STATUS,RP0 ; Bank 1

MOVLW 255

MOVWF SPBRG ; BAUDRATE GENERATOR

MOVLW B'00000000' ; 8-BIT,TRANSMIT DISABLED,ASYNCHRON,BRGH=0=LOW SPEED

MOVWF TXSTA

BSF PIE1,RCIE ; enable INTERRUPT for receive

BSF INTCON,PEIE ; PERIPHERIE INT ENABLE

;***************************************************

; Init LCD -> LB1

;***************************************************

CALL LCD_LB1_INIT

BCF STATUS,RP0 ; Bank 0

CLRF TMR0

BCF INTCON,T0IF

BSF INTCON,GIE ; Interrupt freigeben

;**********************************

;******* Haupt-Programm ***********

;**********************************

MAIN

CLRWDT

;***************************************************

; Timer -> TR1

;***************************************************

MOVLW 19 ; Test auf >=

BCF STATUS,RP0 ; Bank 0

BCF STATUS,RP1 ; Bank 0

SUBWF TR1_HI,W ;F-W -> W

BTFSS STATUS,ZERO

GOTO LABEL_TR1_CHECK

MOVLW 19

SUBWF TR1,W ;F-W -> W

LABEL_TR1_CHECK

BTFSS STATUS,CARRY

GOTO LABEL_TR1_ENDE

LABEL_TR1_RESET

MOVLW 19 ; Test auf >=

SUBWF TR1_HI,F ;F-W -> F

MOVLW 19

SUBWF TR1,F ;F-W -> F

BTFSS STATUS,CARRY

DECF TR1_HI,F

LABEL_TR1_SET ; toggel output

BTFSC S0,1

GOTO LABEL_TR1_CLR

BSF S0,1

GOTO LABEL_TR1_ENDE

LABEL_TR1_CLR

BCF S0,1

LABEL_TR1_ENDE

; Progetto Achy

; Progetto Achy

; Progetto Achy

;***************************************************

; UDATA -> UD1

;***************************************************

BCF STATUS,RP0 ; Bank 0

BCF STATUS,RP1 ; Bank 0

BTFSC S0,0 ; active

GOTO LABEL_UD1_1 ; †es

; test positive edge

BTFSS S0,1

GOTO LABEL_UD1_SETFD

BTFSC UD1_FD,0

GOTO LABEL_UD1_SETFD

BSF UD1_FD,0

BCF UA1RSFLAG,0 ; set nothing received

BCF UA1RSFLAG,1 ; set no error

BSF S0,0 ; active

MOVLW LOW UA1INBUF+2 ; set pointer (adress)

MOVWF UA1INBUF

MOVLW 1 ; 1 b†tes

MOVWF UA1INBUF+1

GOTO LABEL_UD1_SETFD

LABEL_UD1_1

BTFSC UA1RSFLAG,1 ; error ?

GOTO LABEL_UD1_3 ; break

BTFSS UA1RSFLAG,0 ; received ?

GOTO LABEL_UD1_2 ; no

BCF STATUS,RP0 ; Bank 0

BCF STATUS,RP1 ; Bank 0

BCF INTCON,GIE ; disable interrupts

BTFSC INTCON,GIE ; disabled ?

GOTO $-2 ; no

MOVFW UA1INBUF+2

MOVWF DATO

BSF INTCON,GIE ; enable interrupts

LABEL_UD1_3

BCF STATUS,RP0 ; Bank 0

BCF STATUS,RP1 ; Bank 0

BCF S0,0 ; not active

LABEL_UD1_2

LABEL_UD1_SETFD

; test negative edge

BCF STATUS,RP0 ; Bank 0

BCF STATUS,RP1 ; Bank 0

BTFSC S0,1

GOTO LABEL_UD1_EXIT

BCF UD1_FD,0

LABEL_UD1_EXIT

; Progetto Achy

; Progetto Achy

; Progetto Achy

; Progetto Achy

; Progetto Achy

; Progetto Achy

;***************************************************

; LCD -> LT1

;***************************************************

; test of positiv edge

BTFSC LT1_FD,0

GOTO LABEL_LT1_SETFD

BTFSS S0,1

GOTO LABEL_LT1_SETFD

MOVLW 0

MOVWF SYS_TMP1

MOVLW 0

MOVWF SYS_TMP2

MOVLW HIGH LCD_LB1_GOTOXY ; set page

MOVWF PCLATH

CALL LCD_LB1_GOTOXY

BCF STATUS,RP0 ; Bank 0

BCF STATUS,RP1 ; Bank 0

MOVFW DATO

MOVWF SYS_TMP4

CLRF SYS_TMP5

BCF SYS_TMP10,0

CLRF SYS_TMP9

MOVLW HIGH LCD_LB1_DEZO100 ; set page

MOVWF PCLATH

CALL LCD_LB1_DEZO100

BCF PCLATH,3 ; Page 0

BCF PCLATH,4 ; Page 0

LABEL_LT1_SETFD

BCF STATUS,RP0 ; Bank 0

BCF STATUS,RP1 ; Bank 0

BTFSS S0,1

GOTO LABEL_LT1_SETFD2

BSF LT1_FD,0

GOTO LABEL_LT1_END

LABEL_LT1_SETFD2

BCF STATUS,RP0 ; Bank 0

BCF STATUS,RP1 ; Bank 0

BCF LT1_FD,0

LABEL_LT1_END

; Progetto Achy

; Progetto Achy

; Progetto Achy

;****************************************

GOTO MAIN

END

Inserita:

grazie dell'informazione ifa ....

iachy io penso una cosa ,quando si fanno

le prove con con due moduli aurel conviene usare 2 pc

magari con hyperterminal e quando hai centrato l'algoritmo

giusto poi pensi a srivere il programma sul pic.

ciao

ifachsoftware
Inserita:

Prego.

(Guarda pero' che non mi metto a studiare un listato assembler cosi' lungo ... , in fondo sono passato al C proprio per non perder tempo sui dettagli , ma focalizzare l'attenzione sul problema reale :rolleyes:B) )

Ciao e Buona Pasqua a tutti

  • 2 years later...
Inserita:

Ho utilizzato i moduli Aurel Rtl/Rtf Data-Saw 433 per realizzare un prototipo...

Ora dovrei passare ad un modello definitivo e stavo cercando dei moduli tx/rx più economici magari in tecnologia smd ed a 3 volt...

Se qualcuno ha qualcosa da consigliare ...

Ciao

Grazie

PS: per ora ho chiesto un preventivo per grossi volumi alla aurel ed alla radiometrix

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...