Hoe tekst sturen naar de PC

Wie bang is om te vragen schaamt zich om te leren.
Plaats reactie
mcu_boytje
Berichten: 11
Lid geworden op: ma 6 apr 2009, 15:33
Locatie: GENT

Hoe tekst sturen naar de PC

Bericht door mcu_boytje »

Hallo iedereen

Ik heb juist een programma geschreven in de PIC die de ADC inleest en dan doorstuurt naar mijn UART naar mijn laptop maar ik krijg enkel van die rare tekens dus hij werkt de communicatie.

Wat ik graag wil zien op mijn terminal is als ik de spanning van 0V tot 5V regel op mijn board dat er op mijn terminal dat ook verschijnt

Hoe kan ik dat verwezenlijken?. Op mijn LCD scherm krijg ik wel die spanning erop maar dan zonder USART

Kan iemand mij eens vertellen hoe je dat moet doen
moet ik ergens +0x30 optellen bij die byte die wordt verstuurd

Ik probeer dat:

unsigned short temp_res;
long tlong;
unsigned char ch;

void main() {
USART_Init(19200); // Initalize USART (19200 baud rate, 1 stop bit, no parity...)

// Select Vref and analog inputs, in order to use ADC_Read
ADCON1 = 0; // All PORTA pins as analog, VDD as Vref
TRISA = 0xFF; // PORTA is input

do {
temp_res = ADC_Read(2) >> 2; // Read 10-bit ADC from AN2 and discard 2 LS bits
tlong = (long) temp_res * 5000;
tlong /= 1023;
ch = tlong / 1000;
USART_Write(ch + 0x30);
Delay_ms(500);

ch = (tlong / 100) % 10; // extract 0.1 volts digit
USART_Write(ch + 0x30);
Delay_ms(500);

ch = (tlong / 10) % 10; // extract 0.01 volts digit
USART_Write(ch + 0x30);
Delay_ms(500);

ch = tlong % 10; // extract 0.001 volts digit
USART_Write(ch + 0x30);
Delay_ms(500);

} while (1); // endless loop
}

Ik krijg wel degelijk cijfers op het scherm maar ik wil bvb 5.145V hebben, hoe kan ik dat zodanig aanpassen dat het mij lukt dat te hebben?
Gebruikersavatar
Stynus
Site Admin
Site Admin
Berichten: 5910
Lid geworden op: vr 16 mei 2003, 20:45
Locatie: Overpelt (België)
Contacteer:

Bericht door Stynus »

Je zal die long eerst moeten omzetten naar eens string dan. Als je nu bijvoorbeeld 22 doorzend dan gaat de pc dit opzoeken in zijn ASCII tabel en geeft het teken dat bij 22 hoort weer.
mcu_boytje
Berichten: 11
Lid geworden op: ma 6 apr 2009, 15:33
Locatie: GENT

Bericht door mcu_boytje »

Hallo Stynus

Ik heb ondertussen die functie gevonden om van een long naar een string te gaan en dan deze string doorsturen naar de USART.

Vraag 1
=====
Wat ik mij afvraag waarom moet dat steeds een array zijn van 6 elementen en geen 7 elementen?
Heeft dat te maken met het '/0' character?
Dus moet blijkbaar unsigned char text[5]; declareren
Nu krijg tenminste geen rare tekens meer

Vraag 2
=====
De interne interne ADC van de microcontroller 16F877A
Deze geeft een interne ADC en deze zet om 0..1023 stappen.
Ik gebruik een reference spanning van 3V

Eerst bepaal ik de stapspanning :

stap_voltage = Vref / 1023 = 3V / 1023 = 2.93mV / stap

Ik programmeer dit als volgt :
temp_res = ADC_Read((0) * 1000.0) / 1023;

Mijn vraag is mag ik dat zo doen? en wat wordt er dan eigenlijk berekend?

Vraag 3:
======
Is mijn algoritme juist voor het zenden en ontvangen van een byte en kan ik het universeel gaan gebruiken
Mag ik dat doen die if en dan nog een repeat om te testen als er een byte
toekomst of verzonden is

Kan ik dat later in een interrupt handler plaatsen en wat moet ik dan testen ik veronderstel stel die vlaggen TXIF en de RCIF

Code: Selecteer alles


void Send_Byte(unsigned char tx_byte)
{
   UART1_Write(Lo(tx_byte));
   UART1_Write(Hi(tx_byte));
}

unsigned char Read_Byte()
{
  do
  {
     if(UART1_Data_Ready() == 1)
     {
        return(UART1_Read());
     }
  {
  while(UART1_Data_Ready() != 1);
}

Met vriendelijke groet
S
Gebruikersavatar
Stynus
Site Admin
Site Admin
Berichten: 5910
Lid geworden op: vr 16 mei 2003, 20:45
Locatie: Overpelt (België)
Contacteer:

Bericht door Stynus »

Vraag 1 ligt denk ik aan je compiler

Vraag 2 heb ik geen antwoord op

Vraag 3 Geen idee hangt van je compiler af.
Interupt kan. Hoe in C? geen idee.
Plaats reactie