-         

Ergebnis 1 bis 6 von 6

Thema: Interruptproblem INT_RB

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.10.2005
    Ort
    Bremerhaven
    Beiträge
    101

    Interruptproblem INT_RB

    Anzeige

    HI

    Ich habe einen 16F628A PIC. Nun wollte ich ueber die Interruptroutine INT_RB = Interupt on pin change RB4 - RB7 eine einfache LED Steuerung realisieren. Nur so zum testen.

    Mit enable_interupts(INT_RB); wird der Interrupt aktiviert.

    #int_RB
    RB_isr()
    {
    output_High(PIN_A6);
    delay_ms(500);
    output_Low(Pin_A6);
    }


    Ich bin jetzt davon ausgegangen das bei einem Wechsel einer der Eingangspins die LED kurz aufleuchtet und dann wieder erlischt.
    Als ich das Programm mal simuliert habe scheint sich der PIC irgendwie in eine Schleife zu begeben. Da der Ausgang A6 bei High-Pegel an einem der Eingangspins blinkt. Sind alle Eingaenge low ist der Ausgang auch Low.

    Hab ich da grundsaetzlich was falsch verstanden oder warum funkt das nicht.

    Gruss

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.08.2004
    Ort
    Winterthur
    Beiträge
    312
    Hallo

    1) Vergiss die Simulation von Interrupts! MPLAB macht da teilweise nicht ganz mit.

    2) Ev. musst Du zuerst noch den PORTB einlesen, um die "missmatch-condition" aufzuheben, wie's im Datenblatt so schön heisst. Ich hab zwar den selben Compiler, weiss aber nicht, ob der das bereits von sich aus macht (ich mach die ISR's immer zu Fuss via #int_global).

    Also wär z.B. sowas am Anfang der ISR einzubauen:

    Code:
    #asm
     movf 6,1
    #endasm
    Gruess
    Fritzli

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.10.2005
    Ort
    Bremerhaven
    Beiträge
    101
    Sers

    Das Programm hab ich mit PIC Simulator IDE simuliert. Dachte eigentlich das der schon ziemlich gut funkt.

    Hab mal den Code eingefuegt. Jetzt blinkt alles nur noch zwei mal. Immerhin.

    Was genau
    bewirkt movf 6,1

    Sorry hab von Assemblercode nicht so viel Ahnung.

    Gruss

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.08.2004
    Ort
    Winterthur
    Beiträge
    312
    Hallo

    'movf 6,1' wäre etwas schöner geschrieben 'movf PORTB, F'. Damit liest man den PORTB und schreibt ihn direkt wieder zurück. Warum das nötig ist, steht beim int-on-change im Datenblatt.

    Was lieferst Du denn als Eingangssignal? Stimulus? Was macht die Software in realer Hardware?


    Gruess
    Fritzli

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.10.2005
    Ort
    Bremerhaven
    Beiträge
    101
    Sers

    Also das Einganssignal wird mal direkt von einem Hallsensor kommen (5V). Die Software soll dann jeweils die Impulse in einer Variablen aufaddieren und in bestimmten Zeitintervallen via RS232 ausgeben. Das ganze wird dann noch mit Labview weiterverarbeitet.
    Im reallen hab ich das bis jetzt noch nicht probiert. Werd ich in den naechsten Tagen machen.
    Da die Impuls der Sensoren aber in sehr kurzen Zeitabstaenden ausgeloest werden wird es wohl schwierig sein herauszufinden ob der PIC nun richtig zaehlt oder nicht.
    Deswegen wollte ich das mit der Software von Oshon probieren.

    Gruss

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.10.2005
    Ort
    Bremerhaven
    Beiträge
    101
    Sers

    Hab den Fehler gefunden. Da ich den Pins keine Variable zugewiesen habe muss man es so schreiben. Dann funkts einwandfrei.

    if(input(PIN_B4) == 1)
    {
    hallgear++;
    }

    if(input(PIN_B5) == 1)
    {
    hallwheel++;
    }


    Gruss

Berechtigungen

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