- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 6 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 52

Thema: Timer für AVR ATtiny84 oder ander allgemein in C

  1. #11
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.08.2008
    Ort
    DE
    Beiträge
    523
    Anzeige

    Powerstation Test
    Keine Fehler im Code aber eine Warnung "TIMER0_COMPA_vect" appears to be amisspelled Signal handler
    In meinem Code gibts aber kein "TIMER0_COMPA_vect"

    wie macht man das Codefenster?

    Im Editor "#" anklicken

    Da in deinem Code auch nichts initialisiert ist, wirst du auch vermutlich nichts sehen. LED etc um eine Änderung wahrzunehmen wäre nicht schlecht...

    mfg
    Geändert von Wsk8 (28.02.2014 um 23:16 Uhr)

  2. #12
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Die Liste der zur verfügung stehenden Interruptvektoren steht bei GCC in den µC spezifischen files, die über eine paar Umwege (den µC aus der Umgebungsvariable suchen) eingebunden werden, über #include <avr/io.h>

    Für den Tiny84 ist das File
    iotnx4.h Im Verzeichnis von GCC avr/Include/avr/ - die Interruptvectoren stehen ganz unten im File.

    Der gesuchte ist hier TIM0_COMPA_vect bzw. TIM0_OVF_vect . Wieso da jemand die Namen ander als etwa beim Mega32 gewählt hat, kann ich auch nicht sagen - ist irgendwie unpraktisch.

  3. #13
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.08.2008
    Ort
    DE
    Beiträge
    523
    Zitat Zitat von Besserwessi Beitrag anzeigen
    Die Liste der zur verfügung stehenden Interruptvektoren steht bei GCC in den µC spezifischen files, die über eine paar Umwege (den µC aus der Umgebungsvariable suchen) eingebunden werden, über #include <avr/io.h>

    Für den Tiny84 ist das File
    iotnx4.h Im Verzeichnis von GCC avr/Include/avr/ - die Interruptvectoren stehen ganz unten im File.

    Der gesuchte ist hier TIM0_COMPA_vect bzw. TIM0_OVF_vect . Wieso da jemand die Namen ander als etwa beim Mega32 gewählt hat, kann ich auch nicht sagen - ist irgendwie unpraktisch.
    Wie gesagt habe ich den Code ohne Hilfestellung nur schnell in nem Editor geschrieben. Ich weiß leider auch nicht alles auswendig.

    mfg

  4. #14
    Erfahrener Benutzer Fleißiges Mitglied Avatar von derNeue
    Registriert seit
    01.01.2011
    Ort
    Bierstadt Radeberg
    Alter
    38
    Beiträge
    101
    Zitat Zitat von ooweberoo Beitrag anzeigen

    Verstehe es nicht

    ?????????????????

    Ich finde, du musst viel ruhiger werden. Oberallgeier hat dir so ein top Beispiel gegeben. Versuch das doch einfach mal zu verstehen. Druck es aus, wenns dir hilft, lösche halt die Zeilen raus, die dich stören, aber versuche zu verstehen, was dort eigentlich passiert. Hier alles mit unbrauchbar zu betiteln, nur weil es nicht speziell für dich geschrieben ist, ist schon ziemlich anmaßend. So viele Leute, die mit den Datenblättern zurecht kommen und es stimmt, AVR Datenblätter sind ansich gut aufgeräumt. Versuche einfach mal den Code von Oberallgeier zu verstehen, versuche herauszufinden, welche Infos er aus dem Datenblatt hat, und wo sie stehen. Wenn du einzelnes nicht findest, darfst du hier gern nachfragen, da gibt es dann Hilfsbereite, die dir sagen, wo du es findest. Und ganz schnell wirst du feststellen, das alles doch ganz logisch aufgebaut ist. C hat mit AWL einer sps nunmal rein gar nix zu tun. Evtl hilft es auch, wenn du erstmal ein reines C-Tutorial ansiehst, zumindest die ersten paar Themen, das du erstmal C-spezifische Dinge verstehst, und dann später kannst du dich mit den Besonderheiten des C eines AVR's bekannt machen.

    Zitat Zitat von Besserwessi Beitrag anzeigen
    Der gesuchte ist hier TIM0_COMPA_vect bzw. TIM0_OVF_vect . Wieso da jemand die Namen ander als etwa beim Mega32 gewählt hat, kann ich auch nicht sagen - ist irgendwie unpraktisch.
    Die Begriffe sind auch im Datenblatt zu finden, unter der Kategorie Interrupts. Es war also Atmels Idee mit den unterschiedlichen Namen.


    Dennis
    Ich studiere die Wirkung der Sonnenstrahlen auf das Liebesleben der Pflastersteine

  5. #15
    Neuer Benutzer Öfters hier Avatar von ooweberoo
    Registriert seit
    24.02.2014
    Ort
    66482 Zweibrücken
    Alter
    39
    Beiträge
    28
    Blog-Einträge
    1
    Hallo,

    @Wsk8: Zunächstmal Danke aber ich kann kein # finden. Klicke auf die Grafik für eine größere Ansicht

Name:	Unbenannt.jpg
Hits:	7
Größe:	10,1 KB
ID:	27665 hier mal ein Bild von meinem Editor Menue. Wo ist da die Raute?
    Mein AVR Studio schlägt mir immer "TIMER0_COMPA_vect" vor, dachte dann würde es den Befehl auch geben. Aber dein Timer Beisiel war trotzdem sehr
    hilfreich für mich.

    @Besserwissi: Danke für die info. Bei mir muss das ein anderer Ordner sein, diese Verzeichnisse gibt es bei mir nicht TIM0_COMPA_vect bzw. TIM0_OVF_vect
    erzeugt gerade keine Fehler oder Warnungen. Ich probiere und melde mich dann nochmal. Danke !

    @derNeue: Danke! Ja es ist ein sehr gutes Programm.
    Geändert von ooweberoo (04.03.2014 um 09:29 Uhr)

  6. #16
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.653
    ... ich kann kein # finden ...
    Es ging um Deine Frage wie ein Codefenster aufgemacht wird.
    Code:
    Dies ist ein Codefenster
    Kollege Wsk8 hatte Dir dazu geraten "Im Editor "#" anklicken".

    Es gibt in meinem Browser bei seiner Funktion als Beitragseditor fürs Forum in der zweiten von drei Befehlszeilen ganz rechts die Buttons [#] [<>] und [php]. Dies gilt für die "Standardansicht" - wenn im Fenster "Direkt antworten" nur eine Befehlszeile offen ist, dann rechts unten auf [Erweitert] drücken. Und dieses "#" hatte WSK8 gemeint *gg*.

    ... Mein AVR Studio schlägt mir immer "TIMER0_COMPA_vect" vor ...
    Dann ist möglicherweise im Studio der falsche Controller angewählt oder sonst etwas nicht im Lot; im Datenblatt zum tiny84, doc 8006K–AVR–10/10, Seite 48, stehen nämlich als Vector 10 und 12 in der Spalte Source genau diese ISR-Adressen.
    Geändert von oberallgeier (04.03.2014 um 13:58 Uhr) Grund: neueste Doc referenziert
    Ciao sagt der JoeamBerg

  7. #17
    Neuer Benutzer Öfters hier Avatar von ooweberoo
    Registriert seit
    24.02.2014
    Ort
    66482 Zweibrücken
    Alter
    39
    Beiträge
    28
    Blog-Einträge
    1
    @ oberallgeier: achso... bei erweitert wie versteckt. Naja wenigstens weis ich jetzt um die ISR Befehle... aber der entweder der Timer 0 wird nicht aktiviert oder der Interupt funktioniert nicht.

    Code:
    #include <stdlib.h>
    #include <avr/io.h>
    #include <avr/interrupt.h>
    
    #define F_CPU  1000000UL
    
    volatile unsigned int millisekunden;
    
    
    //-------OB1--------------------------------------------------------------------------------------------------------------------
    
    int main(void)
    {
        //---8 Bit Timer CTC Modus---
    
        TCCR0B = (1<<WGM02) && (1<<CS01);               // CTC Modus, Vorteiler 8, // ((1000000/8)/1000) = 125
        OCR0B = 125-1;                                                  //TCNT0 = OCR0A = 125-1 
        TIMSK0 = (1<<OCIE0B);                                     // Interups EIN
        sei();
    
        while(1)
        {
    
        }
    }
    
    //------DB1------------------------------------------------------------------------------------------------------------------------
    
    ISR(TIM0_COMPA_vect)
    {
       millisekunden++;
    
    	if(millisekunden == 200)//1000
    	{
    		DDRA = 0x06;
    	}
    	
    }

    weis auch nichtmehr weiter.... je länger ich schau desto verwirrter werde ich...TCCR0B = (1<<WGM02) stimmt das nun, oder doch TCCR0A = (1<<WGM01)

    vielleicht sollte ich doch den 2313 bestellen, mit dem arbeiten wenigstens Leute die dann eventuell schon wissen wie die Timer dort funktionieren.. <<<der ist so geil...

  8. #18
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.653
    Zitat Zitat von oberallgeier Beitrag anzeigen
    ... Du solltest vermutlich das eine oder andere Tutorial noch durchgehen ...
    Und, tust Du das? Ich denke nicht, ich glaube dass Du nur abschreibst - und das noch dazu falsch. Trotzdem mal ein Punkt zur Hilfe:
    Zitat Zitat von ooweberoo Beitrag anzeigen
    ...
    Code:
    ...
        TCCR0B = (1<<WGM02) && (1<<CS01);               // CTC Modus, Vorteiler 8, // ((1000000/8)/1000) = 125
    ...
        TIMSK0 = (1<<OCIE0B);                                     // Interups EIN
    ...
    //------DB1------------------------------------------------------------------------------------------------------------------------
    ISR(TIM0_COMPA_vect)
    {   ...
    }
    ...
    Der Kommentar zu TIMSK0 ist falsch. Ich meine nicht die Rechtschreibung sondern der Plural. Es wird nur EIN Interrupt frei eingeschaltet, der von Kanal B. Deshalb tut sich nix bei Deiner Interruptroutine für den Kanal A *ggg*. Wie leider oben gesagt - abgeschrieben, aber vermutlich nix gedacht. Mehr schreibe ich nicht, denn Du meinst ja, mit meinem Code kannst Du "leider nichts anfangen. Zu viel durcheinander drin". Aber der Code funktioniert bestens *gg*.

    Zitat Zitat von ooweberoo Beitrag anzeigen
    ... vielleicht sollte ich doch den 2313 bestellen ...
    Der programmiert sich auch nicht von selbst! Deshalb fürchte ich, dass Du bei dem mit Deiner gegenwärtigen Programmiermethode (bzw. Deiner Abschreibetechnik) auch auf die Nase fällst. Und - das täte mir dann doch leid.
    Ciao sagt der JoeamBerg

  9. #19
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.08.2008
    Ort
    DE
    Beiträge
    523
    Code:
    int main(void) {
    	TCCR0A |= (1<<WGM01);		// CTC Modus
    	TCCR0B |= (1<<CS01);		// Vorteiler 8
    	OCR0A = 125-1;				// ((1000000/8)/1000) = 125
    	TIMSK0 = (1<<OCIE0A);		// Interups EIN
    	sei();
    	
        while(1) {}
    }
    mfg

  10. #20
    Neuer Benutzer Öfters hier Avatar von ooweberoo
    Registriert seit
    24.02.2014
    Ort
    66482 Zweibrücken
    Alter
    39
    Beiträge
    28
    Blog-Einträge
    1
    Hallo,

    @ oberallgeier: ziemlich voreingenommen zu behaupten ich würde nur abschreiben. Ich habe das Tutorial hier, auf Microcontroller.net und
    andere gemacht. Überall ist es anders. Jeder verwendet einen andern Chip und zufälligerweise keiner den 84er.
    Den Befehl " TIMSK0" habe ich aus meinem Datenblatt da in diesem Register das Bit "OCIE0B" existiert. Das es Falsch ist
    konnte ich nicht ahnen, wie auch wenn es so in den Tutorials angegeben ist.
    Ich meinte ja nur das es im Netz eher Hilfe zum 2313er gib als vom 84er.

    @ Wsk8: Danke dir. Aber so wie du das geschrieben hast setze ich im Register (TCCR0A) von Timer 0 den
    CTC- Modus und im Register (TCCR0B) von Timer 0 die entsprechenden Vorteilerbits ???

    Im Microcontroler.net wird ein 2313 verwendet und hier im Tutorial ein mega32. Habe mich halt an die Tutorials gehalten und die Registerbezeichnungen vom 84 eingesetzt. Wenn das dann nicht hinhaut liegt das bestimmt nicht daran das ich nicht nachdenke. Wollte lediglich etwas Hilfe.
    Zudem was soll mir ein Programm bringen in dem auch ein 2313 verwendet wird??? Da bin ich genauso nass wie in den Tutorials.
    Dann sollte man ein Tutorial für alle chips machen. Aber mich nicht anhauen weil ich Tutorials falsch interpretiere.


    Mal der Code aus dem Roboternetz Tutorial hier:

    Code:
    /* Es wird der Timer2 (8-Bit) eines ATmega32 verwendet, der mit einem Quarz 
       mit 7,3728 MHz betrieben wird. Im Abstand von 0,01 ms erzeugt der Timer 
       einen Interrupt, also eine Frequenz von 100000 Hz (oder 100 kHz). 
       Der Timer wird auf einen Prescaler von 1 und einem OCR2-Wert von 73 konfiguriert. */
    
    volatile uint8_t countTimer2;	// Speichert den aktuellen Zählerwert
    
    SIGNAL(SIG_OUTPUT_COMPARE2)
    {
      countTimer2++;
    }
    
    // Initialisierung:
    TCCR2 = (1<<CS20) | (1<<WGM21);	// Prescaler von 1 | CTC-Modus (siehe unten für Beschreibung)
    OCR2  = 73;			// Vergleichswert
    TIMSK |= (1<<OCIE2);		// Interrupts aktivieren und damit Timer starten
    sei();
    
    // Funktionen zum benutzen der Timer:
    /** Diese Funktion nicht aufrufen. Wird von sleep_millisec aufgerufen.
    Bei t=100 schläft die Funktion 1 ms. */
    inline void sleep(uint8_t t)
    {
    	// countTimer2 wird in der ISR oben inkrementiert
    	countTimer2 = 0;
    	while (countTimer2 < t);
    }
    
    /** Schläft x-Millisekunden. */
    inline void sleep_millisec(uint16_t msec)
    {
    	uint16_t i;
    	for(i=0; i<msec; i++) {
    		sleep(100);
    	}
    }
    --------------------------------------------------------------------------------

    Ich wollte zufällig die gleiche Funktion wie im Beispiel. Das dann an dem Code alles falsch ist kann ich ja nicht wissen.

    Falsch bei mir war : ISR statt SIGNAL, SIG_OUTPUT_COMPARE2 war auch falsch, statt TIMSK sthet bei mir TIMSK0, auch falsch,
    statt OCR2 muss ich TCCR0A oder TCCR0B verwenden....
    Also werde ich es mal mit den 2 Registen getrennt versuchen (TCCR0A &&TCCR0B)..... Mal sehen...

    Danke
    Geändert von ooweberoo (05.03.2014 um 11:47 Uhr)

Seite 2 von 6 ErsteErste 1234 ... LetzteLetzte

Ähnliche Themen

  1. Datenübertragung Bluetooth (oder Funk allgemein)
    Von Bumbum im Forum Software, Algorithmen und KI
    Antworten: 0
    Letzter Beitrag: 21.09.2012, 09:02
  2. ATTiny84 Pegelbegrenzung mit Zenerdiode oder wie?
    Von DanielSan im Forum AVR Hardwarethemen
    Antworten: 25
    Letzter Beitrag: 01.12.2011, 13:40
  3. 5V Netzteil gesucht oder allgemein guter Hersteller
    Von kini im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 5
    Letzter Beitrag: 25.03.2010, 11:33
  4. Ander controller programmieren?
    Von BlackDevil im Forum Elektronik
    Antworten: 10
    Letzter Beitrag: 26.08.2006, 00:20
  5. Bspcode in assembler für AVR Timer
    Von Shadowrun im Forum AVR Hardwarethemen
    Antworten: 5
    Letzter Beitrag: 09.02.2005, 13:55

Stichworte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress