- Labornetzteil AliExpress         
Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 37

Thema: RC-Kanal einlesen, Code in C

  1. #21
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    55
    Beiträge
    524
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    der Controller resetet sich ständig. Es währe schön, wenn du immer das ganze Programm postest. Hast du sei() vor der main noch drinn. Das nimm bitte raus und teste NUR den Code oben, einmal mit Signal, einmal ohne. Damit grenzen wir ein, ob es ein Hardware- oder Softwareproblem ist.

    Gruß

    Jens

  2. #22
    Benutzer Stammmitglied
    Registriert seit
    20.07.2008
    Beiträge
    53
    Hi,
    danke, du hast Recht. Ich hatte allerdings nur im main den Part mit den Blitzen rausgenommen und durch Blinken ersetzt.

    Hier mal der ganze Code komplett:


    Code:
    #include <avr/io.h>
    #include <util/delay.h>
    #include <avr/interrupt.h>
    #include <avr/wdt.h>
    
    /*void blitz()
    {
        PORTA = (1<<PA1);
        _delay_ms(1000);
        PORTA = (0<<PA1); 
    }
    
    void beacon()
    {
        PORTA = (1<<PA0);
        _delay_ms(1000);
        PORTA = (0<<PA0);
    }
    */
    ISR(INT0_vect)
    {
        static int reading;
        static int rc_value;
        
        if(reading == 0)
        {
            TCNT0 = 0;
            MCUCR = (0<<ISC00) | (1<<ISC01);
            reading = 1;
        }
        else
        {
           rc_value = TCNT0;
           TCNT0 = 0;
           MCUCR = (1<<ISC00) | (1<<ISC01);
           reading = 0;
        }
        
        if(rc_value > 150)
        {
             PORTA = (1<<PA2);
        }
        else
        {
             PORTA = (0<<PA2);
        }
      
    }
    
    int main(void)
    {
        DDRA = 0xFF;
        PORTA = 0xFF;
        DDRB = 0x00;
        
        TCCR0B = (1<<CS01);
        MCUCR = (1<<ISC00) | (1<<ISC01);
        GIMSK = (1<<INT0);
        //sei();
       
     /*   while(1)
        {
            blitz();                    
            _delay_ms(150);
            blitz();                     
            _delay_ms(350);               
            beacon();
            _delay_ms(500);
                                
        }  */
        
        while(1)
        {
            PORTA = (1<<PA1) | (1<<PA0);
            _delay_ms(1000);
            PORTA = (0<<PA1) | (0<<PA0);
            _delay_ms(1000);
        }
    }
    So wie er da steht, blinkt die LED, unabhängig vom verbundenen Signal-Pin. sei() ist auskommentiert. Sobald ich die Interrupts wieder erlaube, hat der Signalpin auch auf das Blinken Einfluss.

    Ich brauche die Signalleitung bloß an der Isolation anfassen und es fängt wieder an zu blitzen, mal mehr mal weniger hell bzw kurz und lang. Ziemlich doof...

  3. #23
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Das sieht so aus, als würde die Signal leitung Störungen einfangen. Da sind dann wohl kurze Pulse die jedesmal die LED weder ausschalten. Man könnte sich etwas behelfen, indem man bei ganz kurzen pulsen (z.B. RC:value <10) die Messung nochmal startet und die LED nicht ausschaltet. So kurze pulse sollten bei einem RC signal eigentlich nicht vorkommen. Sonst hilft nur eine Hardwarelösung: die Störugen ganz vermeiden.

  4. #24
    Benutzer Stammmitglied
    Registriert seit
    20.07.2008
    Beiträge
    53
    Hi,
    wie vermeide ich die Störungen per Hardware?
    Gruß
    Marius

    PS: Die Softwarelösung mit Abfrage <10 hilft nicht. Das Verhalten ist total chaotisch, mal leuchten alle Leds einfach dauerhaft, dann flackern sie oder blitzen nur ganz ganz kurz auf in unregelmäßigen Abständen...

    Vielleicht wäre es am einfachsten für die Fernsteuerung einen kleinen extra-tiny zu programmieren...

  5. #25
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Zur vermeidung von Störungen sollte man eventuell abgeschrimte Leitungen nehmen und Auf die Masseverbindungen achten. Im einfachsten Fall treffen sich die Masseleitungen alle in einem Punkt.

  6. #26
    Benutzer Stammmitglied
    Registriert seit
    20.07.2008
    Beiträge
    53
    Mich verwundert es auch ein wenig, dass die Schaltung selbst dann läuft, wenn ich den Strom am Pluspol trenne. Anscheinend läuft dann der Strom über den Signalpin in den Controller hinein und speist die Schaltung. Das ist doch sehr seltsam oder?

    Und das Blinken sollte doch unabhängig vom Interrupt nebenher laufen. Vielleicht nicht 100%ig vom Timing, wenn oft in den Interrupt gesprungen wird, aber ein Blitzen sollte doch garnicht auftreten, da die delay-Anweisungen ja trotzdem abgearbeitet werden sollten!? Verstehs nicht...

  7. #27
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    55
    Beiträge
    524
    Hallo,

    kannst du zum testen einen Pulldown von, sagen wir mal, 1k einbauen. Dann sag uns bitte deine Fusebits und deine Taktquelle. Wie hast du die Schaltung aufgebaut? Gibt es einen Schaltplan, ein Layout?

    Gruß

    Jens

  8. #28
    Benutzer Stammmitglied
    Registriert seit
    20.07.2008
    Beiträge
    53
    Auf einen Pulldown hätte ich auch selber kommen können... Omann An den anderen Ausgängen ist überall einer, nur beim Interrupteingang hab ichs übersehen...

    Der 1k ist drin, jetzt reagiert die Leitung nicht mehr auf "anfassen". Wenn mit dem Empfänger verbunden, schalten die anderen LEDs aber nicht im Sekundentakt sondern blitzen sekündlich nur schwach auf.

    Einen Schaltplan habe ich leider nicht. Ich habe die AVR-Grundschaltung verwendet mit internem Takt. Davor einen 5V-Spannungsregler mit LM7805 (geht immerhin bis 1A, sollte doch reichen?).

    Ansonsten ist nicht viel auf der Platine drauf, an Ausgängen PA0 und PA1 eben je eine Transistor CE-Schaltung (BC517) mit (anfängerhaften) 68-Ohm als Basiswiderstand. 2,2k wären auch gegangen habe ich schon gehört Hab mir das mit meinem Halbwissen aus der E-Technik-Vorlesung bez. Arbeitspunkteinstellung etc ausgerechnet und bin auf 68 gekommen.

    Vielleicht sollte ich die mal austauschen gegen die 2,2k?

    Alle Ausgänge sind per Pulldown mit 10k auf GND gezogen. Ein 10µ-Elko sitzt am Hochspannungseingang (derzeit 11,5V Lipo-Akku). Sonst nur ein paar 100nF am Spannungsregler und einer direkt am Chip VCC-GND.

    Fusebits sind: L: 62, H: DF, e: FF
    Also alles standard + internem Takt. Es läuft ja auch alles eigentlich, bis auf die Störungen durch den Signalpin vom Empfänger.

    Sollte ich vielleicht den Massenanschluss am Empfängerkanal auch noch mit dem Massenanschluss der Steuerschaltung verbinden? Hab bisher NUR den Signalpin abgegriffen.

    Danke und Gruß.

  9. #29
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    55
    Beiträge
    524
    Hallo,
    Alle Ausgänge sind per Pulldown mit 10k auf GND gezogen.
    Wenn du die Ausgänge des Tinys meinst, brauchst du das nicht. Der Controller schaltet eh zwischen Vss und GND.

    Fusebits sind: L: 62, H: DF, e: FF
    Ich habe jetzt nicht nach gerechnet, hast du berücksichtigt, dass der Takt bei den Fusebit Einstellungen durch 8 geteilt wird?

    Sollte ich vielleicht den Massenanschluss am Empfängerkanal auch noch mit dem Massenanschluss der Steuerschaltung verbinden? Hab bisher NUR den Signalpin abgegriffen.
    JA, du brauchst unbedingt ein Bezugspotential, immer!



    Gruß

    Jens

  10. #30
    Benutzer Stammmitglied
    Registriert seit
    20.07.2008
    Beiträge
    53
    Ich meine die Ausgänge für die Transistoren. Damit ein definierter Zustand vorliegt, nimmt man doch die Pulldowns? Da ich VCC schalten will, nehme ich einen Pulldown, der GND anlegt, wenn der Pin "aus" ist. So stehts in den Büchern, die ich für die Grundlagen mal durchgearbeitet habe...

    Der Takt wird in der Tat geteilt, und zwar von internen 8Mhz auf 1Mhz dann. Die delay-Funktionen passen sich ja eh automatisch an und für die Timerskalierung habe ich auch mit 1Mhz gerechnet. Das Auslesen des RC-Wertes klappt auch wunderbar.

    Zum Bezugspotential: Im Grunde sind ja Empfänger und Schaltung beide an der Akkus-Masse angeschlossen. Bloß geht der Empfänger vorher noch durch den Motorregler (BEC). Eine direkte GND-Leitung ist vielleicht effektiver, ich werde das direkt mal testen.

    Gruß
    Marius

Seite 3 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress