doolitle15
14.10.2007, 13:43
hallo
ich hoff mir kann jemand weiterhelfen! ich programmiere meinen PIC16f877a in c mit mplab! der pic soll über die rs232 schnittstelle zeichen empfangen können und weiters soll der controller aber immer 2 eingelesene adc werte zu meinem pc schicken!!(also der pic soll immer daten zum pc senden)
irgendwie funktioniert das nicht so wirklich!! ich steh ziemlich auf der leitung und weiß nicht mehr weiter
hoff mir kann jemand helfen!!
mfg doolitle
#include <16F877a.h>
#device ADC=10 //10bit Auflösung
#use delay (clock=4000000)
#use RS232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)
#fuses XT, NOWDT, NOPROTECT, NOLVP
#include <stdlib.h>
#include <string.h>
void main (void)
{
char empfangen[3], senden[2];
int8 duty1;
int8 duty2;
int8 i, a, zeit, counter;
int16 ad_wert1, ad_wert2;
float spannung1, spannung2;
spannung1 = 0;
spannung2 = 0;
duty1=0;
duty2=0;
i=0;
setup_ccp1(CCP_PWM); //setup capture unit 1 to
setup_ccp2(CCP_PWM); //setup capture unit 1 to
setup_timer_2(T2_DIV_BY_1,100,1); //setup period timer2
/* Initialisierung der ADC PORTS */
setup_adc(ADC_CLOCK_INTERNAL );
setup_adc_ports( ALL_ANALOG );
while(TRUE)
{
/* Empfangsteil */
do
{
if(kbhit())
{
for(i=0; i<=2; i++)
{
delay_ms(200);
empfangen[i] = getc();
}
}
}
while (empfangen == 0);
/* ************************************************** ********** */
/* Steuerungsteil */
if(empfangen[0] == 'a') output_high(PIN_B5);
if(empfangen[1] == 's') output_high(PIN_B6);
if(empfangen[2] == 'd') output_high(PIN_B7);
if(empfangen[0] == 'q') output_low(PIN_B5);
if(empfangen[1] == 'w') output_low(PIN_B6);
if(empfangen[2] == 'e') output_low(PIN_B7);
/* Mess- und Sensordaten einlesen */
set_adc_channel(1); // Spannungsversorgung der Steuerelektronik
ad_wert1 = read_adc();
spannung1 = (ad_wert1 / 1023) * 5;
delay_ms(200);
set_adc_channel(2); // Spannungsversorgung der Motoren
ad_wert2 = read_adc();
spannung2 = (ad_wert2 / 1023) * 12;
/* ************************************************** ********** */
/* Sendeteil */
senden[0] = spannung1;
senden[1] = spannung2;
for(a=0; a<=1; a++)
{
printf("\f%S\n",senden[a]);
}
/* ************************************************** *********** */
}
}
ich hoff mir kann jemand weiterhelfen! ich programmiere meinen PIC16f877a in c mit mplab! der pic soll über die rs232 schnittstelle zeichen empfangen können und weiters soll der controller aber immer 2 eingelesene adc werte zu meinem pc schicken!!(also der pic soll immer daten zum pc senden)
irgendwie funktioniert das nicht so wirklich!! ich steh ziemlich auf der leitung und weiß nicht mehr weiter
hoff mir kann jemand helfen!!
mfg doolitle
#include <16F877a.h>
#device ADC=10 //10bit Auflösung
#use delay (clock=4000000)
#use RS232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)
#fuses XT, NOWDT, NOPROTECT, NOLVP
#include <stdlib.h>
#include <string.h>
void main (void)
{
char empfangen[3], senden[2];
int8 duty1;
int8 duty2;
int8 i, a, zeit, counter;
int16 ad_wert1, ad_wert2;
float spannung1, spannung2;
spannung1 = 0;
spannung2 = 0;
duty1=0;
duty2=0;
i=0;
setup_ccp1(CCP_PWM); //setup capture unit 1 to
setup_ccp2(CCP_PWM); //setup capture unit 1 to
setup_timer_2(T2_DIV_BY_1,100,1); //setup period timer2
/* Initialisierung der ADC PORTS */
setup_adc(ADC_CLOCK_INTERNAL );
setup_adc_ports( ALL_ANALOG );
while(TRUE)
{
/* Empfangsteil */
do
{
if(kbhit())
{
for(i=0; i<=2; i++)
{
delay_ms(200);
empfangen[i] = getc();
}
}
}
while (empfangen == 0);
/* ************************************************** ********** */
/* Steuerungsteil */
if(empfangen[0] == 'a') output_high(PIN_B5);
if(empfangen[1] == 's') output_high(PIN_B6);
if(empfangen[2] == 'd') output_high(PIN_B7);
if(empfangen[0] == 'q') output_low(PIN_B5);
if(empfangen[1] == 'w') output_low(PIN_B6);
if(empfangen[2] == 'e') output_low(PIN_B7);
/* Mess- und Sensordaten einlesen */
set_adc_channel(1); // Spannungsversorgung der Steuerelektronik
ad_wert1 = read_adc();
spannung1 = (ad_wert1 / 1023) * 5;
delay_ms(200);
set_adc_channel(2); // Spannungsversorgung der Motoren
ad_wert2 = read_adc();
spannung2 = (ad_wert2 / 1023) * 12;
/* ************************************************** ********** */
/* Sendeteil */
senden[0] = spannung1;
senden[1] = spannung2;
for(a=0; a<=1; a++)
{
printf("\f%S\n",senden[a]);
}
/* ************************************************** *********** */
}
}