- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 7 von 7

Thema: Atmega8 "Timer" selber erstellen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    Beiträge
    3.501
    Blog-Einträge
    9
    Hallo,

    in deinem jetzigen Programm würdest du andauernd in die Speichern-Routine springen, da "Startzähler" nicht zurück gesetzt wird und damit machst du dir dein EEPROM kaputt.
    Mal eine ganz doofe Frage meinerseits.....wieso machst du es nicht einfach das es beim Tastendruck gespeichert wird ?
    Finde ich persönlich einfacher als sowas.
    Zu deiner Frage.....was meinst du bis wieviel der in einer Do-Loop zählt?
    Im Moment läuft es so ab, das er bei Startzähler = 1 die Variable Zählwert erhöht und das solange bis die Variable einen bestimmten Wert erreicht hat. Danach wird sie auf 0 gesetzt und Sekunde um 1 erhöht. Das ganze macht er 30x bis Sekunde = 30 ist und dann geht er ins Programm speichern und danach geht der ganze rummel von vorne los.
    Du kannst also die "Zeit" bis die 30 erreicht sind dadurch bestimmen indem du den Wert XXXXX sag ich mal von 16000 auf 32000 erhöhst.
    Die Zeit die der Controller braucht um das Hauptprogramm abzuarbeiten wird durch die Befehle im Programm (ISRs und Subs mit eingeschlossen) beeinflusst.
    Je mehr Befehle desto mehr Zeit braucht er.
    Du kannst es ausrechnen indem du dir anguckst was der Compiler aus jedem Befehl macht, dir dann anschaust wieviel Taktzyklen die Befehle brauchen, die zusammenrechnest und dann hast du die Zeit.
    Einfacherer Weg wäre du togglest am Anfang deines Programmes einen Pin und schaust mitm Oszi wie hoch der Takt ist. Dann weißt du wieviel Sekunden vergehen bevor der Controller wieder am Anfang vom Programm ist.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  2. #2
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Die Idee, 30 Sekunden nach einer Änderung zu speichern ist schon gut - so speichert man nicht jede kleine Änderung, sondern nur wenn der Wert auch eine Zeit genutzt wurde. Vor dem Speichern sollte noch getestet werden, ob sich der Wert überhaupt geändert hat.

    Um die 30 Sekunden festzulegen sehe ich 2 Möglichkeiten: man zählt die Durchläufe der Hauptschleife. Wie viele Durchläufe man da braucht müsste man nachmessen bzw. aus der Simulation bestimmen. In der Simulation gibt es einen Zyklenzähler, so das es nicht schwer ist die Zahl der Zyklen für einen Druchlauf zu messen. So super genau muss die Zeit ja auch nicht sein.

    Für eine genauere Zeit könnte man einen Interrupt von einem der Timer nutzen - zumindest wenn die PWM Frequenz nicht extra hoch gewählt wird. In der ISR wird dann ein Variable hoch oder runter gezählt, und bei erreichen der Grenze ein Flag gesetzt. Über das Falg merkt das Hauptprogramm dann, das die Daten gespeichert werden sollen. Speichern direkt in der ISR ist nicht gut (ginge aber auch noch), weil das Schreiben ins EEPROM relativ lange braucht - in der Zeit wird dann nicht auf Tasten reagiert.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    08.08.2007
    Beiträge
    36
    OK, doch nicht so optimal erklärt.............

    Warum nicht beim Tastendruck speichern...
    Also ich habe 10 Hell/Dunkel stufen und 10 Farben, 5x dunkler 3x Farbe, och nö doch heller ,wieder 3x macht schon 12xspeichern.

    Das mit dem "Ende" hab ich weggelassen, klar wird in der speicher Routiene das "zählen" beendet !
    Also bei jedem Tastendruck wirds gestartet, bei erneutem Tastendruck wirds wieder auf 0 gesetzt, also so lange man Tasten drückt gehts immer von vorn los bzw. wird neu gestartet, wenn dann Farbe und Helligkeit erreicht eben so lange zählen bis speichern, dann Ende der speicher Sache, geht erst wieder los wenn wieder Tastendruck.
    So besser verständlich?
    Das ist ja auch kein Klavier wo man standig Hell ändert oder Farbe ändert, aber bei jedem Tasten zu speichern find ich auch übertrieben.

    Das ist ja auch nur meine Idee das zu lösen, wenns bessere Vorschläge giebt immer her damit.

  4. #4
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    Beiträge
    3.501
    Blog-Einträge
    9
    Zitat Zitat von kollimann Beitrag anzeigen
    Das ist ja auch kein Klavier wo man standig Hell ändert oder Farbe ändert, aber bei jedem Tasten zu speichern find ich auch übertrieben.
    Nene ich meinte nicht bei jedem Tastendruck sondern viel mehr das du es so einstellst wie du haben möchtest und dann einen seperaten Taster zum Speichern hast (oder eine Tastenkombination aus Tastern).
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    08.08.2007
    Beiträge
    36
    Nee, per Taster speichern = ausgeschlossen, da 4 Taster für 6 Funktionen und nicht meine Anwendung sondern "Anwender" Anwendung !
    Das muss der allein für sich erledigen der Atmega.................

    Ich dacht halt es gibt eine Möglichkeit zu errechnen wieviel mal er in 1 Sekunde durch die Loop rennt, zumindest in etwa, sprich er zählt den Wert x bis 1Mio oder bis 1Bio in 1 Sekunde.

    Es ist doch Wurscht ob der nun nach 30Sekunden oder nach 40 oder 50 speichert.
    Ich such doch nur einen Anhaltswert wenn ich schreibe

    wert = 0
    Do
    incr wert
    loop

    bei wieviel steht wert nach 1 Sekunde in etwa, das ich dann wert 0 setzen kann und sekunde +1 mache.

    ich dacht das kann man berechnen.
    so nach dem Motto
    "wenn nichts dazwischen kommt" schaff ich es bei 4Mhz auf 1,5Mio durchläufe pro Sekunde.
    Da nehm ich 1Mio und gut ist.

    Achso, ich hab kein Oszi zum messen.
    Geändert von kollimann (27.08.2012 um 20:38 Uhr)

  6. #6
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Die Zeit für einen Schleifendurchlauf würde ich so auf vielleicht 0.1 ms schätzen, also rund 10000 Durchläufe je Sekunde . Nachmessen geht ganz gut in der Simulation per Einzelschritt - das ist deutlich einfacher und auch genauer als mit dem Oszilloskop.

Ähnliche Themen

  1. Wie kann ich ein "code snippet" für AVR-Studio erstellen?
    Von Boomi** im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 06.05.2012, 10:30
  2. Roboter selber über "Gehirnschnittstelle" gesteuer
    Von Andree-HB im Forum Sensoren / Sensorik
    Antworten: 14
    Letzter Beitrag: 13.09.2010, 18:22
  3. Getriebeschrittmotor "selber bauen"
    Von guybrush im Forum Motoren
    Antworten: 7
    Letzter Beitrag: 19.06.2010, 10:52
  4. "frequenzumrichter" ähnlich l298 selber bauen
    Von heduobacht im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 01.09.2006, 09:01
  5. Touchscreen Controller selber bauen mit "ADS7846E"
    Von amd2408 im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 12.05.2005, 15:00

Berechtigungen

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

LiFePO4 Speicher Test