- Messaggi: 1222
- Ringraziamenti ricevuti 104
USART e ADC
11 Anni 7 Mesi fa #11
da StefA
..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
Risposta da StefA al topic USART e ADC
scusa, ho chiesto due volte che programma usavi, la fretta è sempre una cattiva consigliera..
Hai provato RS232 terminal...printf...premere un altro pulsante?
Con questo tuo ultimo riordino ne sei venuto a capo?
Ste
Hai provato RS232 terminal...printf...premere un altro pulsante?
Con questo tuo ultimo riordino ne sei venuto a capo?
Ste
..avevano magari fatto lo sgambetto al ka, ma il sangue restava sempre più denso dell'acqua.. [cit.]
Si prega Accedi o Crea un account a partecipare alla conversazione.
- StefA
- Moderator
Riduci
Di più
11 Anni 7 Mesi fa #12
da Fausto
Risposta da Fausto al topic USART e ADC
ciao,
allora ho risolto proprio 2 minuti fa'. lo trascrivo questa sera perchè non ho fatto in tempo neanche a copiarlo su chiavetta, dato che lavoro su 2 pc distinti.
usando un'altro pulsante non cambia nulla, è come se pigiassi in continuazione.
Ho fatto allora una and nell'if
if ("r premuto"&&"DatardyUSART")
questo mi permette di funzionare, ma è lentissimo. A questo punto ho solo fatto un doppio if.
Nell'ultimo modo anche se il concetto non cambia, vi assicuro che a livello di velocita' cambia eccome!!!
RS232 terminal l'ho provato, grazie, ma anche lui mi ha dato gli stessi errori (per fortuna direi).
Questa sera copio tutto.
Grazie molte per il vostro aiuto.
allora ho risolto proprio 2 minuti fa'. lo trascrivo questa sera perchè non ho fatto in tempo neanche a copiarlo su chiavetta, dato che lavoro su 2 pc distinti.
usando un'altro pulsante non cambia nulla, è come se pigiassi in continuazione.
Ho fatto allora una and nell'if
if ("r premuto"&&"DatardyUSART")
questo mi permette di funzionare, ma è lentissimo. A questo punto ho solo fatto un doppio if.
Nell'ultimo modo anche se il concetto non cambia, vi assicuro che a livello di velocita' cambia eccome!!!
RS232 terminal l'ho provato, grazie, ma anche lui mi ha dato gli stessi errori (per fortuna direi).
Questa sera copio tutto.
Grazie molte per il vostro aiuto.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Fausto
- Autore della discussione
- Premium Member
Riduci
Di più
- Messaggi: 143
- Ringraziamenti ricevuti 1
11 Anni 7 Mesi fa - 11 Anni 7 Mesi fa #13
da Fausto
Risposta da Fausto al topic USART e ADC
copio il codice, non è scritto in modo professionale ma funziona e spero che possa aiutare. Il mio prossimo step è quello di comunicare in SPI con un ADC della AD che puo' leggere anche le tensioni negative. Sara' la prima volta che comunico in SPI. Se avete suggerimenti fatemelo sapere Grazie a tutti:
#include <p18f4550.h>
#include <usart.h>
#include <stdio.h>
#include <stdlib.h>
#define LCD_DEFAULT
#include "LCD_44780.h"
#pragma config FOSC = HS
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config PBADEN = OFF
/*
OSC = HS set the oscillaor at high frequency
WDT = OFF disabilito il wdt timer
LVP = OFF disable programming LVP
PBADEN = disable analog input
*/
int get_ADC ();
void sendUSART(char);
void main (void)
{
unsigned char dataChar;
unsigned char data=0;
int value_ADC;
unsigned int convInt=0;
int valore_ADC=0;
//Setting I/O
LATA=0x00;
TRISA=0xFF;
LATB=0x00;
TRISB=0xFF;
LATC=0x00;
TRISC=0b11111101;
LATD=0x00;
TRISD=0x00;
LATE=0x00;
TRISE=0x00;
OpenLCD(20);
BacklightLCD(TURN_ON);
/*
Configuration USART
8 bit
19200 bit/s
1 bit stop
0 bit parity
*/
OpenUSART(USART_TX_INT_OFF &
USART_RX_INT_OFF &
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_BRGH_HIGH,
64);
//send the string to the PC
putrsUSART ("...start writing: ");
///send the string to the LCD
WriteStringLCD("...start writing:");
/*analog setting*/
// Abilito AN0-AN1 come ingressi analogici
//Vref sono impostati come massa e Vcc
ADCON1=0b00001101;
//seleziono AN2 come ingresso
//Go/done:0, la conversione è terminata
//ADON:il modulo è disattivato
ADCON0=0b00000100;
// imposto i tempo di conversione
//giustificazione a destra
//TAD:FOSC/4
//TACQ: 16 TAD
ADCON2=0b10110100;
ClearLCD();
while(1)
{
data=0x00;
//Clean LCD
//get value by ADC converter and print in the LCD
value_ADC=get_ADC();
//convert integer to string
itoa(value_ADC,dataChar);
//receive the USART data
if(DataRdyUSART()==1){
data = ReadUSART();
if(data==0x1B) //press ESC
{
break;
}
if(data==0x72) //press r
{
sendUSART(dataChar);
}else{}
}
else{
delay_ms(100);
}
}
CloseUSART();
ClearLCD();
WriteStringLCD("RS232: Closed");
}
int get_ADC()
{
int adc=0;
//Abilito l'ADC
//Si abilita l'ADC.
ADCON0bits.ADON=0x01;
ADCON0bits.GO=1;
while(ADCON0bits.GO);
adc = (((int) ADRESH) << 8 ) | ADRESL;
WriteIntLCD(adc,4);
ShiftCursorLCD(LEFT,4);
return(adc);
}
void sendUSART(char msg)
{
putrsUSART ("button pressed:value is: ");
while(BusyUSART());
putsUSART(msg);
while(BusyUSART());
WriteUSART(0x0A); //LF
while(BusyUSART());
WriteUSART(0x0D); //CR
while(BusyUSART());
}
#include <p18f4550.h>
#include <usart.h>
#include <stdio.h>
#include <stdlib.h>
#define LCD_DEFAULT
#include "LCD_44780.h"
#pragma config FOSC = HS
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config PBADEN = OFF
/*
OSC = HS set the oscillaor at high frequency
WDT = OFF disabilito il wdt timer
LVP = OFF disable programming LVP
PBADEN = disable analog input
*/
int get_ADC ();
void sendUSART(char);
void main (void)
{
unsigned char dataChar;
unsigned char data=0;
int value_ADC;
unsigned int convInt=0;
int valore_ADC=0;
//Setting I/O
LATA=0x00;
TRISA=0xFF;
LATB=0x00;
TRISB=0xFF;
LATC=0x00;
TRISC=0b11111101;
LATD=0x00;
TRISD=0x00;
LATE=0x00;
TRISE=0x00;
OpenLCD(20);
BacklightLCD(TURN_ON);
/*
Configuration USART
8 bit
19200 bit/s
1 bit stop
0 bit parity
*/
OpenUSART(USART_TX_INT_OFF &
USART_RX_INT_OFF &
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_BRGH_HIGH,
64);
//send the string to the PC
putrsUSART ("...start writing: ");
///send the string to the LCD
WriteStringLCD("...start writing:");
/*analog setting*/
// Abilito AN0-AN1 come ingressi analogici
//Vref sono impostati come massa e Vcc
ADCON1=0b00001101;
//seleziono AN2 come ingresso
//Go/done:0, la conversione è terminata
//ADON:il modulo è disattivato
ADCON0=0b00000100;
// imposto i tempo di conversione
//giustificazione a destra
//TAD:FOSC/4
//TACQ: 16 TAD
ADCON2=0b10110100;
ClearLCD();
while(1)
{
data=0x00;
//Clean LCD
//get value by ADC converter and print in the LCD
value_ADC=get_ADC();
//convert integer to string
itoa(value_ADC,dataChar);
//receive the USART data
if(DataRdyUSART()==1){
data = ReadUSART();
if(data==0x1B) //press ESC
{
break;
}
if(data==0x72) //press r
{
sendUSART(dataChar);
}else{}
}
else{
delay_ms(100);
}
}
CloseUSART();
ClearLCD();
WriteStringLCD("RS232: Closed");
}
int get_ADC()
{
int adc=0;
//Abilito l'ADC
//Si abilita l'ADC.
ADCON0bits.ADON=0x01;
ADCON0bits.GO=1;
while(ADCON0bits.GO);
adc = (((int) ADRESH) << 8 ) | ADRESL;
WriteIntLCD(adc,4);
ShiftCursorLCD(LEFT,4);
return(adc);
}
void sendUSART(char msg)
{
putrsUSART ("button pressed:value is: ");
while(BusyUSART());
putsUSART(msg);
while(BusyUSART());
WriteUSART(0x0A); //LF
while(BusyUSART());
WriteUSART(0x0D); //CR
while(BusyUSART());
}
Ultima Modifica 11 Anni 7 Mesi fa da Fausto. Motivo: al posto di " 8)" otto parenteisi chiusa c'è una emoticon
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Fausto
- Autore della discussione
- Premium Member
Riduci
Di più
- Messaggi: 143
- Ringraziamenti ricevuti 1
11 Anni 7 Mesi fa #14
da Mauro Laurenti
Risposta da Mauro Laurenti al topic USART e ADC
Il nuovo nome delle funzioni introdotte nella libreria 3.0 sembra che non piacciano!
...e non usi RS232 Terminal!
Lo metti su penna USB e funzione su XP, Windows 7, Vista...
...e hai piu' funzioni!
Che vuoi di piu'!
L'esempio tornera' certamente utile!
Saluti,
Mauro
...e non usi RS232 Terminal!
Lo metti su penna USB e funzione su XP, Windows 7, Vista...
...e hai piu' funzioni!
Che vuoi di piu'!
L'esempio tornera' certamente utile!
Saluti,
Mauro
Ringraziano per il messaggio: Fausto
Si prega Accedi o Crea un account a partecipare alla conversazione.
Moderatori: Mauro Laurenti, Pinna, StefA, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.