Op Elektronicaforum.nl is de kans om een antwoord op je vraag te krijgen heel groot. In overzichtelijke subcategorieën kun je vragen en antwoorden over elektronica zoeken, plaatsen en beantwoorden.
Elektronica Forum is onderdeel van Schakelingen Online
 


 
Hoe tekst sturen naar de PC

 
Plaats nieuw bericht   Plaats Reactie    Schakelingen Online Forum Index -> School en huiswerk vragen
Auteur Bericht
mcu_boytje



Geregistreerd op: 6-4-2009
Berichten: 11
Woonplaats: GENT

BerichtGeplaatst: Do 9 Apr 2009, 11:56    Onderwerp: Hoe tekst sturen naar de PC Reageer met quote

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?
Naar boven
Bekijk gebruikers profiel Stuur privé bericht
stynus
Moderator
Moderator


Geregistreerd op: 16-5-2003
Berichten: 5787
Woonplaats: Overpelt (België)

BerichtGeplaatst: Do 9 Apr 2009, 12:28    Onderwerp: Reageer met quote

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.
_________________
Met vriendelijke groet,
Stynus
http://www.elektronicastynus.be

--> Elektronica bouwpakketten en componenten te koop. <--
Naar boven
Bekijk gebruikers profiel Stuur privé bericht Bekijk de homepage
mcu_boytje



Geregistreerd op: 6-4-2009
Berichten: 11
Woonplaats: GENT

BerichtGeplaatst: Zo 12 Apr 2009, 22:11    Onderwerp: Reageer met quote

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:


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
Naar boven
Bekijk gebruikers profiel Stuur privé bericht
stynus
Moderator
Moderator


Geregistreerd op: 16-5-2003
Berichten: 5787
Woonplaats: Overpelt (België)

BerichtGeplaatst: Zo 12 Apr 2009, 22:52    Onderwerp: Reageer met quote

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.
_________________
Met vriendelijke groet,
Stynus
http://www.elektronicastynus.be

--> Elektronica bouwpakketten en componenten te koop. <--
Naar boven
Bekijk gebruikers profiel Stuur privé bericht Bekijk de homepage
Plaats nieuw bericht   Plaats Reactie    Schakelingen Online Forum Index -> School en huiswerk vragen Tijden zijn in GMT + 2 uur
Pagina 1 van 1                     

 
Ga naar:  
Je mag geen nieuwe onderwerpen plaatsen
Je mag geen reacties plaatsen
Je mag je berichten niet bewerken
Je mag je berichten niet verwijderen
Ja mag niet stemmen in polls
Je mag geen attachments plaatsen in dit forum
Je mag bestanden downloaden in dit forum


Powered by phpBB © 2001, 2002 phpBB Group and phpBB SEO