- LiFePO4 Speicher Test         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 24

Thema: Atmega 168 bei Beschleunigungsrampe ausgelastet - Abhilfe

  1. #11
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    Anzeige

    LiFePo4 Akku selber bauen - Video
    was mir gerade noch einfällt zu den Tabellen ...
    wenn Du nicht direkt den Timer-Wert in die Tabelle, sondern nur
    jeweils die Erhöhung von Schritt zu Schritt, dann kannst Du einfach
    per Addition eine globale Variable aufsummieren und brauchst nur
    4000 Byte. Das ist schnell und "platzsparender" im Flash.



    Wenn ich derlei Berechnungen vorab mache verwende ich gern
    n Tabellenkalkulationsprogrämmchen und füge die Zeichenketten
    per "verketten" zusammen. Dann kann man einfach per Copy & Paste
    die Daten in eine Textdatei überführen, die per #include in den
    Bascom Quelltext eingebunden wird

    Vor den Erfolg haben die Götter den Schweiß gesetzt

  2. #12
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Zitat Zitat von Vitis
    @leo.vetterli
    wenn das pushen und poppen Abhilfe schafft sind zu 99% die Stack-
    Frameeinstellungen zu klein, weil Bascom nämlich alle Register versucht
    zu pushen und poppen in einer ISR ... leider.
    @Vitis
    leo.vetterli hat vollkommen Recht: Bascom speichert die Register, die nur für floating Point benutzt werden nicht ab. Und das sind R12 - R15. Nutzt man Floating Point in der ISR und außerhalb, muss man die Register selber sichern.
    R6, R8 und R9 übrigens auch nicht. Daher dauert der Aufruf der ISR auch nur 53 Takte und nicht 67 (32*2 + 3 für SREG), wie eigentlich anzunehmen wäre.

    Hilfe zu On Interrupt:
    R12 – R15 are not saved. When you use floating point math in the ISR(not recommended) you must save and restore R12-R15 yourself in the ISR.

  3. #13
    Erfahrener Benutzer Roboter-Spezialist Avatar von erik_wolfram
    Registriert seit
    02.12.2009
    Ort
    Berlin
    Beiträge
    406
    @for_ro:
    danke das werde ich mir mal angucken!

    @Vitis
    Danke für die ausführlichen und hilfreichen Tips!
    Leider - die Tabelle mit den Differenzwerten nimmt sage und schreibe 11kB ein für die 3600 Werte. Leider spielt da die Demoversion von Bascom auch nicht mehr mit (an sowas hatte ich garnicht gedacht).

    Das ganze vorher berechnen und in einer Tabelle fällt auch weg, da der SRAM des Atmega 168 nicht dafür ausreicht...

    Macht es auf Grund der Demo-Begrenzung von Bascom Sinn auf Ponyprog umzusteigen? Ich kann leider zur Zeit nicht beurteilen, ob mit das durch den zusätzlichen Speicher mehr chancen gibt?!

  4. #14
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Zitat Zitat von erik_wolfram
    Macht es auf Grund der Demo-Begrenzung von Bascom Sinn auf Ponyprog umzusteigen? Ich kann leider zur Zeit nicht beurteilen, ob mit das durch den zusätzlichen Speicher mehr chancen gibt?!
    Nein, du musst ja mit Bascom kompilieren.
    Überlege mal, ob du nicht ganz auf die Singles verzichten kannst, indem du mit Long Typen arbeitest.

  5. #15
    Erfahrener Benutzer Roboter-Spezialist Avatar von erik_wolfram
    Registriert seit
    02.12.2009
    Ort
    Berlin
    Beiträge
    406
    Also das mit den Registern habe ich nochmal probiert.
    Ergebnis:
    Der µC hängt sich während der Rampe auf und hält eine geringe Geschwindigkeit.

    Dann habe ich nochmal gemessen:
    Bei 6 U/s verlängert sich die Rampe von berechneten 3s auf 4s.
    Der Motor läuft dabei sehr sauber an!

    Werde das ganze jetzt mal mit Longvariablen testen!

  6. #16
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    Zitat Zitat von for_ro
    Zitat Zitat von Vitis
    @leo.vetterli
    wenn das pushen und poppen Abhilfe schafft sind zu 99% die Stack-
    Frameeinstellungen zu klein, weil Bascom nämlich alle Register versucht
    zu pushen und poppen in einer ISR ... leider.
    @Vitis
    leo.vetterli hat vollkommen Recht: Bascom speichert die Register, die nur für floating Point benutzt werden nicht ab. Und das sind R12 - R15. Nutzt man Floating Point in der ISR und außerhalb, muss man die Register selber sichern.
    R6, R8 und R9 übrigens auch nicht. Daher dauert der Aufruf der ISR auch nur 53 Takte und nicht 67 (32*2 + 3 für SREG), wie eigentlich anzunehmen wäre.

    Hilfe zu On Interrupt:
    R12 – R15 are not saved. When you use floating point math in the ISR(not recommended) you must save and restore R12-R15 yourself in the ISR.
    echt?? .. Danke für den Hinweis, man lernt eben doch nie aus
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  7. #17
    Erfahrener Benutzer Roboter-Spezialist Avatar von erik_wolfram
    Registriert seit
    02.12.2009
    Ort
    Berlin
    Beiträge
    406
    So, ich danke für die Hilfe!
    der Austausch von Single gegen Long war vollkommen erfolgreich. Ich musste zwar den Faktor 1000 verwenden (also 3 Nachkommastellen), jetzt funktioniert aber alles super.

    Außerdem:
    Ich habe noch ein Display angeschlossen, die Störungen die das Interrupt bei Beschleunigung (hohe Rechenleistung) verursacht hat sind verschwunden.


    Nebenbei hätte ich nochmal eine Frage in diesen Zusammenhang:

    Ich weis, dass ich sehr viele Anweisungen im Timer-Interrupt habe.
    Kann ich diese mit dem Timerwert verrechnen, damit diese sich nicht durch ihre Abarbeitunsgzeit auf den Timer aufaddieren?
    Gibt es zuverlässige Angaben über die Abarbeitungszeit von Anweisungen?

  8. #18
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Zitat Zitat von erik_wolfram
    Ich weis, dass ich sehr viele Anweisungen im Timer-Interrupt habe.
    Kann ich diese mit dem Timerwert verrechnen, damit diese sich nicht durch ihre Abarbeitunsgzeit auf den Timer aufaddieren?
    Es ist ja nicht grundsätzlich schlecht, viele Anweisungen in der Timer ISR zu haben. Es kommt darauf an, was der µC sonst noch abarbeiten muss und ob die ISR fertig wird, bevor der nächste Aufruf kommt.
    Zeig doch mal deine ISR, die Timer Config und die Dims der verwendeten Variablen.

    Zitat Zitat von erik_wolfram
    Gibt es zuverlässige Angaben über die Abarbeitungszeit von Anweisungen?
    Im Simulator kannst du dir sehr gut ansehen, wieviele Takte und Zeit deine Befehle benötigen. Und auch, wie lange die ganze ISR braucht.

  9. #19
    Erfahrener Benutzer Roboter-Spezialist Avatar von erik_wolfram
    Registriert seit
    02.12.2009
    Ort
    Berlin
    Beiträge
    406
    Also ansonsten hat de µC während der Rampenfahrt nicht viel zu tun. Es wird ein Ausgang für Stop geprüft, ansonsten berechnet er nur 2-5 mal die aktuelle Position und gibt diese auf einem LCD-Display aus.

    So läuft das ganze zufriedenstellen - derzeit betreibe ich das ganze an einer Messvorrichtung - Positioniergenauigkeit liegt im µ-Bereich (+-2µ)! Also die Rampen sollten sauber laufen. Lediglich wenn ich die Berechnung am Ende der Rampe abbrechen würde höre ich einen Unterschied (Währscheinlich zu große Zeit differenz) - deshalb lasse ich den Atmega trotzdem weiterrechnen...

    Jetzt soll aber noch etwas hinzukommen:
    Ein 2. Schrittmotor - lediglich deutlich langsamer in der Drehzahl!
    Dafür Suche ich zum Ersten einen 28Dip-Atmega mit 2 16-bit Timern (wenn es einen gibt) und 2. bin ich am überlegen ob das generell möglich ist bei solchen Takten (2 x ~1600Takte) oder ob sich diese derart gegenseitig stören?!

    Hat schonmal jemand Erfahrung damit gemacht und könnte mir Ratschläge geben?

    Den Code würde ich posten sobald er in einer ordentlichen Form steht ... (ich neige dazu meinen ATmega "vollzumüllen")

    Mit dem Simulator muss ich mich noch auseinander setzten, ist doch alles Neugebiet für mich...

    Aber als Erstes werde ich mir die Vollversion von Bascom beschaffen - darum werde ich nicht herumkommen.
    Aber die ersten Versuche haben mirt gezeigt, dass ich auf dem richtigen Weg bin.

  10. #20
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Zitat Zitat von erik_wolfram
    Dafür Suche ich zum Ersten einen 28Dip-Atmega mit 2 16-bit Timern (wenn es einen gibt) und 2. bin ich am überlegen ob das generell möglich ist bei solchen Takten (2 x ~1600Takte) oder ob sich diese derart gegenseitig stören?!
    2 16-bit Timer haben die wenigsten. Wofür benötigst du denn unbedingt einen 16-bit Timer? Kannst du das nicht mit einem 8-bit Timer erledigen und die Anzahl der Überläufe mitzählen?
    Und was benötigt 1600 Takte?

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test