- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 16 von 16

Thema: 16F877A mit PC verbinden funktioniert nicht!

  1. #11
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.01.2005
    Beiträge
    103
    Anzeige

    Praxistest und DIY Projekte
    hallo rvogt1964 !

    ja du hast recht gehabt ich habe bei den optionen diese Geschwindigkeit runtergesetzt!! und habe 2 mal ohne probleme diesen code hinein brennen können!!!


    ich habe aber gleich noch eine frage zu diesem code!! und zwar ich schicke mit labview einen string ( der zb so aussieht: 032:045) über die serielle schnittstelle zum pic!! und der pic soll diesen string splitten und die zahl 032 in eine variable schreiben und die zahl 45 in eine variable schreiben!! leider funktioniert mein verfasster code nicht!! aber ich weiß nicht warum? kannst du mir vielleicht weiterhelfen??

    c-code:
    #include <16F877a.h>
    #use delay (clock=4000000)
    #use RS232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)
    #fuses XT, NOWDT, NOPROTECT, NOLVP
    #include <stdlib.h>

    void main (void)
    {
    char empfangen[];
    char *Text;
    int8 duty1, duty2;

    duty1 = 0;
    duty2 = 0;


    while(TRUE)
    {
    empfangen=getc();
    delay_ms(400);
    duty1 = (intstrtol(empfangen, &Text,10);
    Text = (Text +1);
    duty2 = (intstrtol(Text, &Text,10);
    delay_ms(200);
    printf("duty1= %u, duty2= %u", duty1, duty2);
    }
    }

    mfg doolitle

  2. #12
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    16.05.2004
    Beiträge
    304
    Zitat Zitat von doolitle15
    Hallo
    jetzt habe ich aber ein anderes Problem und zwar mit dem Brenner 5 von sprut! ich will wiedermal ein c programm hinein brennen aber immer zwischen 50 und 80% kommt eine fehlermeldung wo drinnen steht, dass der brenn vorgang abgebrochen werden muss weil bei ein fehler aufgetreten ist!!
    Das Problem hab ich auch. Ich hoffe, dass es mit dem Brenner8, den ich gerade baue, behoben wird.

    Zu deinem Problem mit dem Text teilen:
    Wenn du eine : Seperierung machst, sollte es so aussehen:
    printf("%u:%u", duty1, duty2);
    und das dann in Labview aufteilen

  3. #13
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.01.2005
    Beiträge
    103
    ich möchte aber vom Labview zum PIC einen string schicken der so aussieht: "023:054"!
    das hab ch auch schon im labview gemacht und es funktioniert!
    getestet hab ich das ganze indem ich einfach meinen pc mit einem anderne mit dem RS232 kabel verbunden hab!

    aber wenn ich diesen string zum pic sende dann schickt der pic immer nur "duty1= 0, duty2= 0" zürück!!

    was könnte ich falsch gemacht haben????

    #include <16F877a.h>
    #use delay (clock=4000000)
    #use RS232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)
    #fuses XT, NOWDT, NOPROTECT, NOLVP
    #include <stdlib.h>

    void main (void)
    {
    char empfangen;
    char *Text;
    long duty1, duty2;

    while(TRUE)
    {
    do
    {
    if(kbhit()) empfangen=getc(); }
    while(empfangen==0);

    delay_ms(500);
    duty1 = strtoul(empfangen, &Text, 10);
    Text = (Text +1);
    duty2 = strtoul(Text, &Text, 10);
    delay_ms(500);

    printf("duty1= %lu, duty2= %lu", duty1, duty2);
    }
    }

  4. #14
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    16.05.2004
    Beiträge
    304
    Hi!

    Es gibt eine token split Funktion. Mit der sollte es funktionieren:

    Code:
    #include <16F877a.h> 
    #use delay (clock=4000000) 
    #use RS232(baud=9600,xmit=PIN_C6,rcv=PIN_C7) 
    #fuses XT, NOWDT, NOPROTECT, NOLVP 
    #include <stdlib.h> 
    
    void main (void) 
    {
    char empfangen, duty[2], split, *Text; 
    
    
    while(TRUE) 
    { 
      do 
      { 
        if(kbhit()) empfangen=getc(); 
      } while(empfangen==0);
    
      strcpy(duty,empfangen);
      strcpy(split,":"); 
      Text = strtok(duty, split); 
      while(Text!=0) 
      {
         puts(Text); 
         Text = strtok(0, split); 
       }
      delay_ms(500); 
      printf("duty1= %u, duty2= %u", duty[0], duty[1]);  
      }
    }

    Ich hab mal das geschrieben.
    Laut Compiler keine Fehler, aber dafür garantier ich nicht /!\ (Ist ja schon spät). Theoretisch läufts. Schaus dir mal durch, und gibt bescheid, ob es das war. Im aktuellen Manual stehen alle Befehle drinnen und in dieser neuesten Ausgabe sogar übersichtlich.

  5. #15
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.01.2005
    Beiträge
    103
    hallo!
    also das ich den empfangen string aufteile das funktioniert!!
    aber habe jetzt ein anderes problem!! ich wandle im labview einen wert zwischen 0-100 in einen String und schicke diesen dann über die RS232 zum pic! der soll diesen wert über den befehl getc() in die variable empfangen schreiben! und dann den pwm ausgang auf den wert einstellen!! leider funktioniert das nicht! weiß vielleicht wer warum das so ist??
    hoffe mir kann jemand helfen??

    mfg


    #include <16F877a.h>
    #use delay (clock=4000000)
    #use RS232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)
    #fuses XT, NOWDT, NOPROTECT, NOLVP
    #include <stdlib.h>

    void main (void)
    {
    char empfangen;

    int8 duty1, duty2;

    duty1=0;
    duty2=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);


    /* Haupt- und Heckrotor AUS */
    output_low(PIN_C0); //Hauptrotor
    output_low(PIN_C3); //Hauptrotor
    output_low(PIN_D0); //Heckrotor
    output_low(PIN_D1); //Heckrotor
    set_pwm1_duty(0); //Geschwindigkeit Hauptrotor
    set_pwm2_duty(0); //Geschwindigkeit Heckrotor

    while(TRUE)
    {

    empfangen=getc();
    delay_ms(400);

    delay_ms(200);

    set_pwm1_duty(duty1);
    set_pwm2_duty(duty1);
    delay_ms(200);
    output_high(PIN_C0); //Hauptrotor
    output_low(PIN_C3); //Hauptrotor
    output_high(PIN_D0); //Heckrotor
    output_low(PIN_D1); //Heckrotor
    delay_ms(200);
    printf("\r %u%%",duty1);
    delay_ms(200);
    }
    }

  6. #16
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    16.05.2004
    Beiträge
    304
    Hi!

    Bitte schreibe den Code in Zukunft in so ein Code Feld. Das ist ja fast nicht lesbar.

    Code:
    #include <16F877a.h> 
    #use delay (clock=4000000) 
    #use RS232(baud=9600,xmit=PIN_C6,rcv=PIN_C7) 
    #fuses XT, NOWDT, NOPROTECT, NOLVP 
    #include <stdlib.h> 
    
    void main (void) 
    { 
    char empfangen; 
    
    int8 duty1, duty2; 
    
    duty1=0; 
    duty2=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); 
    
    
    /* Haupt- und Heckrotor AUS */ 
    output_low(PIN_C0); //Hauptrotor 
    output_low(PIN_C3); //Hauptrotor 
    output_low(PIN_D0); //Heckrotor 
    output_low(PIN_D1); //Heckrotor 
    set_pwm1_duty(0); //Geschwindigkeit Hauptrotor 
    set_pwm2_duty(0); //Geschwindigkeit Heckrotor 
    
    while(TRUE) 
    { 
    
    duty1=getc(); 
    delay_ms(400); 
    
    delay_ms(200); 
    
    set_pwm1_duty(duty1); 
    set_pwm2_duty(duty1); 
    delay_ms(200); 
    output_high(PIN_C0); //Hauptrotor 
    output_low(PIN_C3); //Hauptrotor 
    output_high(PIN_D0); //Heckrotor 
    output_low(PIN_D1); //Heckrotor 
    delay_ms(200); 
    printf("\r %u%%",duty1); 
    delay_ms(200); 
    } 
    }
    Denke ich, da die Variable falsch ist.
    Hat eigentlich meine Variante oder eine andere mit dem Splitten funktioniert?

Seite 2 von 2 ErsteErste 12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests