- LiTime Speicher und Akkus         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Prog läuft nicht >>> ISR(TIM1_COMPA) ok?

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.06.2019
    Beiträge
    130

    Prog läuft nicht >>> ISR(TIM1_COMPA) ok?

    Anzeige

    Praxistest und DIY Projekte
    Hallo zusammen.
    Versuche mich gerade an Timer-Interrupt. uC-Schaltung läuft nicht, kein Blinken.
    Warnung vom Compiler;
    'TIM1_COMPA' appears to be a misspelled signal handler, missing __vector prefix [-Wmisspelled-isr]

    Wo liegt der Fehler?

    Code:
    #define F_CPU 1000000UL	  // int.Takt als Macro übernehmen
    #include <avr/interrupt.h>	 // Interrupt einbinden, damit Interrupt funktioniert
    
    ISR(TIM1_COMPA)	         // Interrupt Service Routine (Seite 48), sobald Vergleichswert OSR1A erreicht wird
    {
      PORTB ^= (1<<PB0);	        // LED blinkt
    }
    
    int main(void)
    {
      DDRB |= (1<<PB0);	      // LED als Ausgang
    
      TCCR1B |= (1<<WGM12) | (1<<CS11);	// Timer1 (16bit), CTC-Mode, Prescaler=8
      TIMSK1 |= (1<<OCIE1A);  // Interrupt für Timer1, Interrupt auslösen sobald Vergleichswert erreicht wird
      OCR1A = 62500;             // OCRx = (Wunschzeit bis 1 Interrupt * f_CPU/Prescaler) - 1 // 500ms*1 000 000/8=62500 // bei 100ms=12499
      sei();                           // Interrupt´s werden gestartet und läuft im Hintergrund
    
      while(1)
      {
    
      }
    }
    __________________________________________________ _
    | Sprache: C | Teensy 3.2 | Status: EwigerAnfaenger |

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.651
    .. Versuche mich gerade an Timer-Interrupt .. Warnung vom Compiler .. missing __vector prefix .. Wo liegt der Fehler? ..
    Der Fehler liegt wohl da, wo er vom Compiler angemeckert wird:

    Dein Aufruf der ISR (für tiny84??) :
    Code:
    ISR(TIM1_COMPA)             //
    Mein Aufruf der ISR (für mega328P) :
    Code:
    ISR(TIMER2_COMPA_vect)             //
    Ok, ok, Du hast also wohl (immer noch) den tiny84 und den C-Compiler am Laufen, dort heißt der Interrupt-Vektor wirklich "TIM1_COMPA" - aber die ISR will halt noch den Zusatz: "-vect". Sprich: die ISR wird mit "ISR(TIM1_COMPA-vect)" gecodet. Die Initialisierung habe ich aber nicht controlliert und das alles auch nicht ausprobiert.

    Viel Erfolg.
    Ciao sagt der JoeamBerg

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.702
    Blog-Einträge
    133
    Zitat Zitat von frabe Beitrag anzeigen
    Versuche mich gerade an Timer-Interrupt. uC-Schaltung läuft nicht, kein Blinken.
    Warnung vom Compiler;
    'TIM1_COMPA' appears to be a misspelled signal handler, missing __vector prefix [-Wmisspelled-isr]
    Hallo,
    welcher µC, welcher Compiler/IDE?
    Womöglich hilft dies weiter: http://privatfrickler.de/avr-gcc-nam...toren-fur-isr/

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.651
    Zitat Zitat von frabe Beitrag anzeigen
    ...
    | Sprache: C | AtmelStudio | Atmel-ICE | Favorit-uC: ATtiny84 | Status: Anfänger |
    Du hast ja mit Deiner Signatur wirklich eine gute Beschreibung Deiner Person und der forumspezifischen Umgebung. Trotzdem so einen oder andern Wunsch oder Hinweis. Atmel-Studios gibts etliche; ich habe AVR Studio 4 (genauer 4.18.700) und Atmel Studio 7.0.1931 am laufen. Da gibts schon (teils kleine, teils größere) Unterschiede. Und ne Frage: was ist ne Atmel-ICE ? Ist das vielleicht ne IDE ?
    Klingt pingelig - nur, ich finde Deine Idee/Signatur a) wirklich super aber b) etwas nicht wirklich gaaanz deutlich/verständlich.

    Schönen Abend.
    Ciao sagt der JoeamBerg

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    865
    Wer es genau wissen will(aber wer will das schon)

    Durch die Auswahl eines Controllers beim Anlegen eines neuen Projektes bekommt man im Studio automatisch auch ein oder zwei controllerspezifische IO-Header-Datei eingebunden. Z.B.:
    iotn25.h für den Tiny25
    und
    iotnx5.h für alle 5er Tinys, also Tiny25/45/85

    Die werden im SolutionExplorer bei dem neueren ATMEL Studio als Dependencies (!!!erst nach dem Kompilieren) zur Ansicht angeboten. (Beim alten AVRStudio 4 waren die auch unter einem extra Knoten aufgeführt, ob der Dependencies hieß, weiß ich aber auch nicht mehr)

    Lange Rede, kurzer Sinn, in diesen Dateien findest Du Konstrukte, wie:
    #define TIM0_COMPA_vect _VECTOR(10)

    Die geben die notwendige Umbenennung für die ISRs vor.

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.06.2019
    Beiträge
    130
    Zitat Zitat von oberallgeier Beitrag anzeigen
    Mein Aufruf der ISR (für mega328P) :
    Code:
    ISR(TIMER2_COMPA_vect) //
    Hallo OberAllgeier, im Datenblatt des ATTiny84 finde ich nur TIM1_COMPA als Timer/Counter1 Compare Match A (Seite 4.
    Klicke auf die Grafik für eine größere Ansicht

Name:	TIM1_COMPA.jpg
Hits:	2
Größe:	82,0 KB
ID:	34221
    Es gibt keinen TIM1_COMPA_xxx oder TIMER1_COMPA_vect.
    Daher meine Unverständniss (Hilflosigkeit) bzgl. der Warnmeldung.
    __________________________________________________ _
    | Sprache: C | Teensy 3.2 | Status: EwigerAnfaenger |

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.651
    .. im Datenblatt des ATTiny84 finde ich nur TIM1_COMPA als Timer/Counter1 Compare Match A .. keinen TIM1_COMPA_xxx oder TIMER1_COMPA_vect ..
    Du heilige Kuh, woher hast Du nur das "TIM1_COMPA_xxx" ? ? ?

    Versuch einfach meine Empfehlung von oben:
    Zitat Zitat von oberallgeier Beitrag anzeigen
    .. dort heißt der Interrupt-Vektor wirklich "TIM1_COMPA" - aber die ISR will halt noch den Zusatz: "-vect". Sprich: die ISR wird mit "ISR(TIM1_COMPA-vect)" gecodet ..
    ohhh, Mist, nein. Natürlich ist der Bindestrich falsch, das müsste ne Fehlermeldung geben, weil der Compiler das wohl als Subtraktionsoperator interpretiert. Also bitte im Code:
    Code:
    ISR(TIM1_COMPA_vect)
    ISR(TIM1_COMPA_vect)
    und keine Angst, der Controller explodiert nicht, selbst wenn mal der Code falsch sein sollte.

    Und bitte: welches Atmel-Studio benutzt Du? Was bedeutet in Deiner Signatur "Atmel-ICE ?"
    Ciao sagt der JoeamBerg

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.06.2019
    Beiträge
    130
    Zitat Zitat von oberallgeier Beitrag anzeigen
    Du heilige Kuh, woher hast Du nur das "TIM1_COMPA_xxx" ? ? ?
    xxx soll als Platzhalter für irgend etwas stehen. Daher habe ich im Datenblatt nach "TIM1_COMPA_" gesucht und nichts gefunden - also auch kein "_vect", oder "_vector"...
    Hmmm? Macht es tatsächlich Sinn, Registereinträge zu verwenden, die nicht im Datenblatt vor kommen?

    Habe meine Signatur geändert AtmelStudio7.x (x steht hier für Sonstige Unter-Unter-Unter-Versionen .
    Mein Programmer/Debugger läuft wie ein ICE, Atmel nennt den tatsächlich auch Atmel-ICE.
    http://ww1.microchip.com/downloads/e..._UserGuide.pdf
    Geändert von frabe (14.06.2019 um 09:04 Uhr)
    __________________________________________________ _
    | Sprache: C | Teensy 3.2 | Status: EwigerAnfaenger |

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.06.2019
    Beiträge
    130
    Zitat Zitat von oberallgeier Beitrag anzeigen
    ISR(TIM1_COMPA_vect)
    und keine Angst, der Controller explodiert nicht, selbst wenn mal der Code falsch sein sollte.
    Prima - funktioniert einwandfrei mit TIM1_COMPA_vect !
    Gibt es eine Logik, warum das nicht im Datenblatt steht?
    __________________________________________________ _
    | Sprache: C | Teensy 3.2 | Status: EwigerAnfaenger |

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    865
    Sicher. Die DBs einiger Tiny-Typen sind so alt, da gab es den GCC für AVR noch gar nicht.
    Im einzig damals verfügbaren Assembler hätte auch ein jmp auf ein beliebig benanntes Label gereicht.

    Wie oben geschrieben: Im Zweifelsfall (Warnungen/Fehler) liest der Compiler nicht das DB, sondern die io-Headerdateien.


    Nachtrag: Hab ich für die ISR-Benamsung auch zu Anfang nicht über die Header rausgesucht, sondern bin stattdessen über die Seite
    https://www.nongnu.org/avr-libc/user...nterrupts.html gegangen. Da gibt's ne entsprechende Tabelle, die allerdings seit geraumer Zeit nicht mehr gepflegt wird.
    Geändert von Holomino (14.06.2019 um 16:27 Uhr)

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Diamex Prog-S funktioniert nicht
    Von Der Big F. im Forum AVR Hardwarethemen
    Antworten: 0
    Letzter Beitrag: 17.01.2013, 11:58
  2. Prog läuft mit internen Oszillator - mit externem Quarz nich
    Von TobiasBlome im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 16
    Letzter Beitrag: 08.10.2009, 22:13
  3. [läuft+Code] Servotest an ATtiny13 läuft nicht
    Von oberallgeier im Forum Motoren
    Antworten: 4
    Letzter Beitrag: 18.10.2007, 17:49
  4. Warum läuft mein Prog nicht?
    Von Elmar.Rieke im Forum Sonstige Roboter- und artverwandte Modelle
    Antworten: 3
    Letzter Beitrag: 25.01.2006, 09:07
  5. Antworten: 3
    Letzter Beitrag: 15.08.2005, 17:41

Berechtigungen

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

LiFePO4 Speicher Test