- LiFePO4 Speicher Test         
Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 37

Thema: RC-Kanal einlesen, Code in C

  1. #11
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Anzeige

    E-Bike
    zu 1): Der Pin INT0 ist an Port B
    Ups, sorry, mit PCINT0 verwechselt.

    Oder geht das auch per Software, die Flanke zu erkennen??
    Klar, du musst im Interrupt doch nur nachschauen, ob der Pin gerade 0 oder 1 ist. Bei 1 war es eine steigende Flanke, bei 0 eine fallende. Dann kannst du dir auch gleich die Variable reading sparen.

    PS: rc_value muss nicht static sein.
    MfG
    Stefan

  2. #12
    Benutzer Stammmitglied
    Registriert seit
    20.07.2008
    Beiträge
    53
    Vielen dank, ich werde mal schauen ob ich das jetzt hinbekomme. Was mich wundert ist, dass ich ja eigentlich nur das Beispielprogramm in C umgeschrieben habe, in Bascom hat es ja anscheinend so funktioniert...

  3. #13
    Benutzer Stammmitglied
    Registriert seit
    20.07.2008
    Beiträge
    53
    Ok, der Code sieht jetzt wie folgt aus:


    Code:
    ISR(INT0_vect)
    {
        static int reading;
        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 > 200)
        {
             PORTA = (1<<PA2);
        }
        else
        {
             PORTA = (0<<PA2);
        }
      
    }
    Dennoch tut sich nach wie vor nichts. Die Schaltung ist komplett durchgecheckt, wenn ich PA2 manuell mit einem Testprogramm schalte, leuchtet die LED.

    Irgendwie hängt es immer noch an der Signalabfrage... Noch eine Idee?

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

    schau dir mal das Register GIMSK an. Ich kann das in deinem Programm nicht finden.

    Gruß

    Jens

  5. #15
    Benutzer Stammmitglied
    Registriert seit
    20.07.2008
    Beiträge
    53
    Hi,
    reicht es nicht im Hauptprogramm mit sei() alle Interrupts zu aktivieren? Hatte jetzt nur noch die ISR gepostet, main war ja soweit anscheinend in Ordnung (siehe weiter oben).

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

    wenn das so währe, müssten dann nach sei() ja wirklich alle Interrupts aktiv sein. Auch die, die du nicht benutzt. Ohne ISR würde das unweigerlich zum Reset führen. Du musst schon jeden Interrupt mit seinem Register freischalten (hier in GIMSK) und du musst die Interrupts global erlauben (sei()).

    Gruß

    Jens

  7. #17
    Benutzer Stammmitglied
    Registriert seit
    20.07.2008
    Beiträge
    53
    Ohhhh, du hast Recht. Hab bisher nur wenig mit Interrupts gearbeitet....

    Also erst Bit setzen bzw Interrupt aktivieren und dann noch freigeben... Danke!

    Und: ES GEHT!!!! Vielen vielen Dank an alle!

    Einziges Problem jetzt: Die Led am Ausgang PA2 flackert ziemlich, auch wenn ich die Senderantenne ausfahre... Liegt das Flackern jetzt an meiner "Reagiergrenze" der Timer-if-Abfrage zum Schalten des Ausgangs? Eigentlich habe ich ja nur eine ja/nein-Abfrage drin, sodass es eigentlich nicht flackern sollte?

    Wäre genial wenn ich das jetzt noch in den Griff bekomme!!

  8. #18
    Benutzer Stammmitglied
    Registriert seit
    20.07.2008
    Beiträge
    53
    Ok, es liegt teilweise daran, dass ich zeitgleich noch andere Aktionen mache, z.b. blinkende LEDs und dass ich dort dann mit _delay_ms Verzögerungen habe, die das Programm dann wartet und wo der Interrupt anscheinend nicht springen kann? Geht ja eigentlich nur nach jeder einzelnen Anweisung. Vielleicht sollte ich die Verzögerungen auf mehrere kürzere Verzögerungen verteilen?


    EDIT: Oder vielleicht einfach einen großen Elko, der kurze Aus-Zeiten abfängt? Bei LEDs vielleicht noch möglich, wenn man jetzt aber größere Verbraucher schalten will, bringts das nicht wirklich denke ich...

    EDIT2: Beides zeigt keine Wirkung. Weder Verzögerungen auf mehrere Anweisungen verteilen (wird intern wahrscheinlich eh anders abgehandelt durch den Compiler) und Elko mir 330µF (der größte den ich gerade zur Hand habe).

    EDIT3: Anscheinend wird auch die ganze Schaltung über den Impuls-Pin des Empfängers mit Strom versorgt, das ist natürlich nicht so erwünscht, wozu habe ich auch den extra Spannungsregler etc. Möchte den Empfänger auch nicht so belasten.. Müsste man irgendwie trennen, vielleicht beeinflusst das alles ungünstig...

    Die gesamte Schaltung zieht im Moment 120mA, die Spannungseinbrüche sind mir schleierhaft. Liegt vermutlich wirklich am Code, dass die LEDs flackern...

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

    delays werden durch Interrupts unterbrochen. Im Normalfall werden nur die ISR nicht von Interruptsunterbrochen.
    Solange du Spannungseinbrüche hast, brauchst du dir um den Code keine Gedanken zu machen. Was passiert, wenn du mit einem Testprogramm die Led im Sekundentakt blinken läst. Funktioniert das mit der aufgebauten Hardware?

    Gruß

    Jens

  10. #20
    Benutzer Stammmitglied
    Registriert seit
    20.07.2008
    Beiträge
    53
    Hi,
    Blinken im Sekundentakt geht, allerdings komischerweise nur dann, wenn ich den Sensorpin des Empfängers nicht mit der Schaltung verbinde!? Sobald ich das Empfängersignal in die Schaltung einleite, blitzt die Led nur kurz und auch nicht immer gleich hell.

    Wie kann das sein??

    Mein Testcode sollte doch eigentlich laufen, unabhängig von der ISR?


    Code:
    while(1)
    {
    PORTA = (1<<PA1) | (1<<PA0);
    _delay_ms(1000);
    PORTA = (0<<PA1) | (0<<PA0);
    _delay_ms(1000);
    }
    2 blinkende LEDs an PA1 und PA0...

Seite 2 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test