madmax Posted April 10, 2004 Report Posted April 10, 2004 Ciao a tutti,ho realizzato un software in "C" per un microcontrollore atmel AVR ATmega8 che gestisce un dispositivo di visualizzazione dell'altezza di una colonna d'acqua.Questo dispositivo acquisisce il segnale di un sensore di pressione sul fondo di un serbatoio e visualizza su un display l'altezza del liquido.Ho sentito parlare di una periferica USART del microcontrollore che potrebbe permettermi, tramite un collegamento seriale, di far comunicare il dispositivo con un PC in modo da visualizzare sul monitor l'altezza della colonna, magari con una interfaccia grafica in visual basic.In particolare vorrei sapere che tipo di routine software devo progettare per spedire dati dal micro al PC e viceversa e in che modo il PC può visualizzarli con il programma in visual basic. Vorrei che il PC visualizzasse in tempo reale lo stato del serbatoio (o di più serbatoi collegati al PC).Inoltre avrei bisogno di qualche consiglio su come collegare il micro con il PC.Grazie a chiunque vorrà darmi qualche informazione a riguardo.
ifachsoftware Posted April 10, 2004 Report Posted April 10, 2004 Ti serve una seriale (io ti consiglio una RS485) in modo da evitare eventuali disturbi , e poter andare fino a 1200m , quello che devi fare e' inventarti un protocollo , gestendo in interrupt per la ricezione dei dati.Per quello che riguarda il lato PC puoi usare il controllo MS-comm.Ciao
madmax Posted April 11, 2004 Author Report Posted April 11, 2004 Grazie mille per l'aiuto,quindi se ho capito bene devo progettare una routine di interrupt che venga eseguita dal microcontrollore ogni volta che dal PC invio dei comandi (per esempio quando devo settare alcuni parametri del dispositivo).Con il controllo MS-comm invece posso ricevere le informazioni relative all'altezza dell'acqua nel serbatoio e visualizzarle sul monitor, giusto?
madmax Posted May 9, 2004 Author Report Posted May 9, 2004 Dato che per il momento non posso collaudare il dispositivo, vorrei chiedervi un paio di cose, giusto per vedere se quello che ho fatto è corretto, almeno dal punto di vista concettuale.Ho scritto le routine in C per la gestione dell'USART del microcontrollore, ho copiato quelle scritte nel datasheet del micro. Ad ogni ciclo di programma faccio un confronto: se il livello del liquido è cambiato, viene spedito il nuovo valore:void USART_init ( unsigned int baud ){ UBRRH = ( unsigned char ) ( baud >> 8 ); //set del baudrate UBRRL = ( unsigned char ) baud; UCSRB = ( 1 << RXEN ) | ( 1 << TXEN ); //abilitazione ricezione e trasmissione UCRSC = ( 1 << URSEL ) | ( 1 << USBS ) | ( 3 << UCSZ0 ); //formato del frame (8 bit,niente parità,2 bit stop)}void USART_transmit ( unsigned char altezza ){ while ( ! ( UCSRA & ( 1 << UDRE )); //aspetta finchè il buffer non è pieno UDR = "(" & altezza & ")"; //spedisce il dato}
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now