1achy Inserito: 15 marzo 2003 Segnala Inserito: 15 marzo 2003 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 moduliTX-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!!!NOTE ALLEGATE A TALE SCHEMA su un altro sito erano:senza utilizzare gli IC della MaximIntanto 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 DATAColgo 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
1achy Inserita: 15 marzo 2003 Autore Segnala Inserita: 15 marzo 2003 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
Piero Azzoni Inserita: 15 marzo 2003 Segnala Inserita: 15 marzo 2003 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.
1achy Inserita: 16 marzo 2003 Autore Segnala Inserita: 16 marzo 2003 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....
1achy Inserita: 16 marzo 2003 Autore Segnala Inserita: 16 marzo 2003 Almeno consigliatemi solo quali moduli acquistare senza postarmi lo schema ... poi gli esperimenti li faccio da meperche' questo fine settimana volevo ordinarli, altrimenti domani vado via in facolta'........
Gabriele Riva Inserita: 29 marzo 2003 Segnala Inserita: 29 marzo 2003 Dai un'occhiata qui: http://www.radiometrix.com/html/products/p...duct_index.html
ifachsoftware Inserita: 30 marzo 2003 Segnala Inserita: 30 marzo 2003 (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 inviatoIl 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: 30 marzo 2003 da ifachsoftware
Gabriele Corrieri Inserita: 30 marzo 2003 Segnala Inserita: 30 marzo 2003 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: 30 marzo 2003 Segnala Inserita: 30 marzo 2003 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
luciano Inserita: 31 marzo 2003 Segnala Inserita: 31 marzo 2003 ciao ifachsoftwarper la tiratura fino a un km che antenne hai usato?ciao luciano
ifachsoftware Inserita: 31 marzo 2003 Segnala Inserita: 31 marzo 2003 Degli spezzoni di cavo di circa 15 cm , comunque puoi anche collegare delle antenne accordate un po' piu' performanti.Ciao
luciano Inserita: 1 aprile 2003 Segnala Inserita: 1 aprile 2003 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'
1achy Inserita: 6 aprile 2003 Autore Segnala Inserita: 6 aprile 2003 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?
1achy Inserita: 13 aprile 2003 Autore Segnala Inserita: 13 aprile 2003 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: 16 aprile 2003 Segnala Inserita: 16 aprile 2003 Mi consigli anche a 1200 di mandare dei byte meno significativi,prima di trasmettere il conteggio?
luciano Inserita: 17 aprile 2003 Segnala Inserita: 17 aprile 2003 scusa ifach ...approfitto per chiederti che compilatore c usi?grazie ciao
1achy Inserita: 17 aprile 2003 Autore Segnala Inserita: 17 aprile 2003 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; DiversesZERO EQU Z ; ZERO-FlagCARRY EQU C ; CARRY-Flag; VariableUD1_FD = 32 ; located in Bank 0S1 = 33 ; located in Bank 0UA1RSFLAG = 34 ; located in Bank 0TR1 = 35 ; located in Bank 0TR1_HI = 36 ; located in Bank 0S0 = 37 ; located in Bank 0UA1OUTBUF = 38 ; located in Bank 0UA1OUTBUF1 = 39 ; located in Bank 0UA1OUTBUF2 = 40 ; located in Bank 0RAM = 41 ; located in Bank 0SYS_WSAV = 112 ; located in Bank 0, 1, 2, 3SYS_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 allUA1TXINT1 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 EXITINTUA1ENDINT 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,FSYS_INT_LABEL_0EXITINT 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 FSRCR1 CLRF INDF INCF FSR,F BTFSS FSR,7 GOTO CR1 BSF FSR,5CR2 CLRF INDF INCF FSR,F MOVLW H'F0' SUBWF FSR,W BTFSS STATUS,ZERO GOTO CR2 BSF STATUS,IRP MOVLW 32 MOVWF FSRCR3 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 interruptsLABEL_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 activeLABEL_UD1_2LABEL_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,0LABEL_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 -> WLABEL_TR1_CHECK BTFSS STATUS,CARRY GOTO LABEL_TR1_ENDELABEL_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,FLABEL_TR1_SET ; toggel output BTFSC S1,0 GOTO LABEL_TR1_CLR BSF S1,0 GOTO LABEL_TR1_ENDELABEL_TR1_CLR BCF S1,0LABEL_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 ENDrx 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; DiversesZERO EQU Z ; ZERO-FlagCARRY EQU C ; CARRY-Flag; VariableUD1_FD = 32 ; located in Bank 0S0 = 33 ; located in Bank 0TR1 = 34 ; located in Bank 0TR1_HI = 35 ; located in Bank 0DATO = 36 ; located in Bank 0UA1RSFLAG = 37 ; located in Bank 0LT1_FD = 38 ; located in Bank 0UA1INBUF = 39 ; located in Bank 0UA1INBUF1 = 40 ; located in Bank 0UA1INBUF2 = 41 ; located in Bank 0RAM = 42 ; located in Bank 0SYS_WSAV = 115 ; located in Bank 0, 1, 2, 3SYS_SSAV = 116 ; located in Bank 0, 1, 2, 3SYS_PSAV = 117 ; located in Bank 0, 1, 2, 3SYS_TMP1 = 118 ; located in Bank 0, 1, 2, 3SYS_TMP2 = 119 ; located in Bank 0, 1, 2, 3SYS_TMP3 = 120 ; located in Bank 0, 1, 2, 3SYS_TMP4 = 121 ; located in Bank 0, 1, 2, 3SYS_TMP5 = 122 ; located in Bank 0, 1, 2, 3SYS_TMP6 = 123 ; located in Bank 0, 1, 2, 3SYS_TMP9 = 124 ; located in Bank 0, 1, 2, 3SYS_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 EXITINTUA1RCINT2 BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 MOVFW RCREG ; trash GOTO EXITINTUA1RCERROR 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,FSYS_INT_LABEL_0EXITINT 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-registerLCD_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 ; waitLCD_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_OUTLCD_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 ; waitLCD_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-ramLCD_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_WRITESTR1LCD_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_CHECKNULLLCD_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_CHECKNULLLCD_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_CHECKNULLLCD_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_CHECKNULLLCD_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_TMP6LCD_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 ; storeLCD_LB1_OUT1 CLRF SYS_TMP3 ; LCDWriteStr (first nibble)LCD_LB1_OUT2 SWAPF SYS_TMP1,W ;high nibbleLCD_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 nibbleLCD_LB1_OUT4 MOVLW 240 MOVWF SYS_TMP3LCD_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 FSRCR1 CLRF INDF INCF FSR,F BTFSS FSR,7 GOTO CR1 BSF FSR,5CR2 CLRF INDF INCF FSR,F MOVLW H'F0' SUBWF FSR,W BTFSS STATUS,ZERO GOTO CR2 BSF STATUS,IRP MOVLW 16 MOVWF FSRCR3 CLRF INDF INCF FSR,F MOVLW H'70' SUBWF FSR,W BTFSS STATUS,ZERO GOTO CR3 MOVLW 144 MOVWF FSRCR4 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 -> WLABEL_TR1_CHECK BTFSS STATUS,CARRY GOTO LABEL_TR1_ENDELABEL_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,FLABEL_TR1_SET ; toggel output BTFSC S0,1 GOTO LABEL_TR1_CLR BSF S0,1 GOTO LABEL_TR1_ENDELABEL_TR1_CLR BCF S0,1LABEL_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_SETFDLABEL_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 interruptsLABEL_UD1_3 BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BCF S0,0 ; not activeLABEL_UD1_2LABEL_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,0LABEL_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 0LABEL_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_ENDLABEL_LT1_SETFD2 BCF STATUS,RP0 ; Bank 0 BCF STATUS,RP1 ; Bank 0 BCF LT1_FD,0LABEL_LT1_END; Progetto Achy; Progetto Achy; Progetto Achy;**************************************** GOTO MAIN END
luciano Inserita: 18 aprile 2003 Segnala Inserita: 18 aprile 2003 grazie dell'informazione ifa ....iachy io penso una cosa ,quando si fanno le prove con con due moduli aurel conviene usare 2 pcmagari con hyperterminal e quando hai centrato l'algoritmogiusto poi pensi a srivere il programma sul pic.ciao
ifachsoftware Inserita: 18 aprile 2003 Segnala Inserita: 18 aprile 2003 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 )Ciao e Buona Pasqua a tutti
alexgioia Inserita: 16 novembre 2005 Segnala Inserita: 16 novembre 2005 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 ...CiaoGraziePS: per ora ho chiesto un preventivo per grossi volumi alla aurel ed alla radiometrix
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora