- SF800 Solar Speicher Tutorial         
Seite 5 von 15 ErsteErste ... 34567 ... LetzteLetzte
Ergebnis 41 bis 50 von 150

Thema: Timer0 Overflow Interrupt löst nicht aus (ATmega16)

  1. #41
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.05.2005
    Beiträge
    101
    Anzeige

    Powerstation Test
    Hab jetzt mal weiter programmiert...
    ext. INT0 Initialisierung und sonstige Inits sollten eigentlich stimmen.
    in main() will ich jetzt einfach ein character echo ausführen.
    In der Receive-Routine (zu finden in der Timer0 ISR) hab ich aber noch ein Problem. Wie kann ich die Bits, die über die RX Leitung kommn und ext. Int0 auslösen zur Weiterverarbeitung einlesen/puffern ?? Steh grad auffer Leitung..
    Angehängte Dateien Angehängte Dateien

  2. #42
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Schau'n wir gleich rein.
    Übrigens, meinen Pegel hab ich auch gefunden, Blödheit tut gottseidank nicht weh ( DDRD = Bit <> DDRC |= Bit).
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #43
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.05.2005
    Beiträge
    101
    Nja so einfach gehts irgndwie doch nicht mit Empfangen...
    Einlesen funzt über PINx (nicht PORTx) soweit ich das jetzt feststellen konnte.
    Bloß wie feststellen, welches empfangene Bit jetzt Datenbit, Start - bzw. Stopbit ?? Müsste man wieder mit "State" wie bei Senden machen oder ??
    Aber müßte man das nicht auch gleich inner INT0 Routine auswerten, anstatt inner Timer0 ISR ??? (wär doch logisch, da mir sonst bits verloren gehen.. )
    Is mir gestern abend noch so durchn Kopf gegangen

    Gruß schamp

  4. #44
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Hi, ich grad in deinem Programm rumgekrixelt.
    Die Int0-ISR zeigt, daß der Absender gerade mit dem Start-Bit anfängt.
    Um mit der nächsten Time-ISR genau in die Mitte vom ersten Datenbit zu kommen, brauchen wir also einen Preload von 1.5 Bit. ab dann gehts wieder normal, auch das Stop Bit nehmen wir mit, aber dann re-enablen wir Int0 und setzen "daten da"
    schau mal

    Sicherheitstest: Beim INT0 alles in Ruhe lassen, nur ein Flag setzen, und in der Mainroutine aufgrund des Flags irgendwas senden.
    Dadurch wissen wir, daß int0 überhaupt funktioniert
    Angehängte Dateien Angehängte Dateien
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #45
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.05.2005
    Beiträge
    101
    Zitat Zitat von PicNick
    Hi, ich grad in deinem Programm rumgekrixelt.
    Die Int0-ISR zeigt, daß der Absender gerade mit dem Start-Bit anfängt.
    irgdnwie ist da was wahres dran *tehe*

    habs ma compiliert, raufgeladen und tera term angeschmissn. Also empfangen tut er (int0 wird ausgelöst) aber Zeichen stimmt noch net. Egal welche Taste man drückt es kommen immer zwei: ÿÿ

  6. #46
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Ev. In der INT0-ISR nur aktiv werden, wenn RX_M_RECEIVE NICHT gesetzt ist.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #47
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.05.2005
    Beiträge
    101
    Zitat Zitat von PicNick
    Ev. In der INT0-ISR nur aktiv werden, wenn RX_M_RECEIVE NICHT gesetzt ist.
    Aber in der INT0-ISR musst du doch RX_M_RECEIVE setzen sonst gehts im "Receive-Teil" vonner Timer0-ISR nicht weiter...

  8. #48
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Ja, ja. Aber aber vorher fragen, ob der Flag nicht schon vorher gesetzt wurde.
    Weil dann läuft ja schon die Empfangs-Sequenz, und während der nächsten 9 Timer-Interrupts wollen wir ja nix mehr sehen oder hören.

  9. #49
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.05.2005
    Beiträge
    101
    du meinst so ?

    Code:
    #pragma vector=INT0_vect
    __interrupt void ext_int0(void)
    {
      if(!(bRxFlag & RX_M_RECEIVE))
      {
      GICR = 0;                     // Disable external interrupt
      bTxFlag &= ~TX_M_SEND;        // Deactivate Transmit-Mode
      bRxCount = 0;                 // Clear Receive Counter
      TIFR |= (1<<TOV0);            // clear T/C0 overflow flag
    
      TIMSK |= (1<<TOIE0);          // enable T/C0 overflow interrupt
      TCNT0 = INT0_PRELOAD;         // Set timer reload-value (to 1.5 bit len). 29 = time delay that
    			        // have already been used in this
    			        // interrupt plus the time
    			        // that will be used by the time
    			        // delay between timer interrupt request
    			        // and the actual sampling of the first
    			        // data bit.
      bRxFlag |= RX_M_RECEIVE;      // Activate Receive-Mode
      }
    }
    edit: funkt trotzdem noch nicht

  10. #50
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Ja, so mein' ich das. Ist auf jeden Fall gut, und würde das enablen/disablen des INT0 erübrigen, aber das klappt ja ohnehin ?
    *murmel*
    Dzt.Stand: Int0 spricht an, Timer offenbar auch,_M _DATA wird ja irgendwann gesetzt, aber es kommt auf ein Input-Zeichen üü irgendwas an. Stimmt das so ?
    d.h. es kann beides fehlerhaft sein, Empfang & Senden, das ist nix
    Also:
    Sende irgendwas vor dich hin, bis _DATA kommt (+ECHO), und dann sende wieder irgendwas, so wie vorher
    Ergebnis:
    A Senden geht überhaupt nicht mehr ---> ?
    B Senden geht, aber ab dem Moment, wenn daten kommen, geht's nicht mehr
    C Nur das Echo ist falsch

    Bitte machen sie ihr Kreuzchen
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Seite 5 von 15 ErsteErste ... 34567 ... LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress