USART e ADC

11 Anni 7 Mesi fa #11 da StefA
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

..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
  • Avatar di StefA
  • Moderator
  • Moderator
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.

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Fausto
  • Avatar di Fausto
  • Premium Member
  • Premium Member
Di più
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());
}
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
  • Avatar di Fausto
  • Premium Member
  • Premium Member
Di più
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
Ringraziano per il messaggio: Fausto

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
Moderatori: Mauro LaurentiPinnaStefAMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login