- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 10

Thema: Interrupt gesteuertes auslesen der Odometriedaten

  1. #1
    Robotik84
    Gast

    Interrupt gesteuertes auslesen der Odometriedaten

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Servus leutz,

    also wie ihr im titel schon lese konntet, hab i mir eine tolle aufgabe gestellt.

    Nur leider habe i keine ahnung wie bei den Atmega8 einen Timer-Interrupt ausglöst wird.
    Ich möchte die Odometriedaten mit 1kHz abfragen und in den Speicher schreiben um diese dann auf den PC zu übertragen und auszuwerten.

    Ich weiss aber nicht welche Register dafür nötig sind geschweige denn wie ich die 1kHz einstelle.

    Ich lese grad das Datenblatt des Atmega8, aber i werd da nicht schlau.

    vielleicht könnt ihr mir ja weiterhelfen?

    Gruß Jens

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Hallo Jens,

    wie man für den AVR Timer benutzt und einstellt findet man hier z.B.:

    https://www.roboternetz.de/wissen/in...imer.2FCounter

    Beim Asuro wird Timer2 für die Trägerfrequenz der IR Sendediode verwendet. Timer1 wird dagegen nicht benutzt.

    Gruß m.a.r.v.i.n

  3. #3
    Robotik84
    Gast
    also schon mal danke...aber nu muss i das mit den A/D-Wandler irgendwie machen...
    muss mich da ma reinlesen...
    bei fragen werd i auf euch zurück kommen...

  4. #4
    Robotik84
    Gast
    so nu mir ne wichtige frage gekommen:

    wie kann i dem Prozessor sagen, dass er ,z.b. jede ms eine A/D-Wandlung durchführen soll?
    hab da irgendwie nix im datenblatt des ATMEGA 8 gefunden.

    kann mir einer weiterhelfen?

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.147
    Blog-Einträge
    3
    In der Sourceforge-Lib werden die Odometriedaten bereits durch eine Interruptroutine erfasst. Die Aufgabe ist also in soweit schon gelöst.

  6. #6
    Robotik84
    Gast
    und wo finde i die sourceforge-Lib???

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.147
    Blog-Einträge
    3
    schau einfach einen Thread weiter, da hat nämlich jemand die selbe Frage gestellt.

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    29.05.2005
    Beiträge
    1.018
    Hallo Robotik84,
    erst einmal herzlich willkommen im Forum.

    Du hast ja schon einige Tips bekommen. Deshalb von mir hier nur ein kleiner Hinweis zu deiner Datenmenge, die du ja zum PC senden möchtest.
    Wenn du jede ms einen Messwert bekommen willst, ist es tatsächlich sinnvoll die Daten zwischenzuspeichern, da die Sendefunktion ja nur mit 2400 Baud arbeitet und du so höchstens nur 240 Byte in der Sekunde übertragen kannst, und eben nicht die 1000 Byte, die du pro Sekunde bekommst.
    Als erstes bieten sich dann natürlich die 1000 Byte Speicher im Asuro an um die Messdaten zu sammeln. HIER ABER VORSICHT: Jeder Funktionsaufruf und natürlich die anderen benutzen Variablen benötigen Speicher (Stichwort Stack für Funktions- und Interruptaufrufe bekannt?). Sei an dieser Stelle lieber etwas zurückhaltend.

    Ich hoffe du hast Erfolg.
    Berichte und/oder Frage weiterhin.
    Lieber Asuro programieren als arbeiten gehen.

  9. #9
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.064
    vielleicht solltest du dich damit begnügen, alle 10 oder 20 millisekunden einen messwert zu holen, das ist schon relativ genau... die kannst du dann auch flüssig zum pc senden lassen, vorrausgesetzt du bist schnell genug mit dem transceiver hinter deinem asuro hinterherzurennen und das kabel ist lang genbug =)

    und wenn nicht: wenn du alle 10 ms einen wert speicherst, dann kannst du logischerweise 10x soviele werte speichern, bevor der speicher überläuft... und diese dann zB auf tastendruck zum Pc schicken.

    [edit] selbstverständlich ist die anzahl der speicherbaren werte die gleiche, aber es dauert halt 10x so lange bis der speicher voll ist =) [/edit]
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    29.05.2005
    Beiträge
    1.018
    @damaltor
    Hallo damaltor, ich glaube, dass Robotik84 die Hell-/Dunkel-Flächen der Odometrie verwuseln möchte. Da wird es etwas knapp, wenn nur alle 10 ms gemessen wird. Allerdings ist dein Vorschlag auf alle Fälle für ASURO-Starter (bist du doch Robotik84?) sehr gut zum üben geeignet.


    Hier noch ein kleiner Nachschlag zu dem Speichervolumen.
    Ich hatte von unter 1000 Byte Messwerten geschrieben. Dies gilt NUR dann, wenn die ADC-Messung als Byte abgelegt wird. Da die ADC-Wandler aber auch 10 Bit wandeln können, müsstest du schon int-Variablen nehmen und dann wären es nur noch unter 500 Messwerte.
    Und jetzt kommt noch rechts und links ins Spiel, also nur noch unter 250 Messwerte.
    Wenn dir ein 8-Bit-Ergebnis reicht, kannst du eben die doppelte Datenmenge sammeln.
    Als kleine Hilfe ist da z.B. folgendes angegeben:
    Code:
    #define MAX_MESSWERTE  400
    /* Das merkwürdige volatile ist extrem wichtig für Interruptfunktionen! */
    volatile unsigned char messdaten [2][MAX_MESSWERTE];  /* 8-Bit */
    volatile unsigned int    i; /* Zähler für max. Messwerte */
    volatile unsigned char fertig; /* Kann im Hauptprogramm zum prüfen
                                                  und dann senden benutzt werden */
    
    /* i und fertig sollten irgendwo im Hauptprogramm vor dem Start des Timers
        initialisiert werden */
    i = 0;
    fertig = 0;
    
    Interrupt-Funktion-vom-Timer
    {
       if (i < MAX_MESSWERTE)
       {
          Hole ODOmetrie-Messwert [links und rechts]
          /* casten (umwandeln) des 16-Bit Messwertes auf 8 bit mit dem
              (unsigned char) */
          messdaten [0][i] = (unsigned char) ADC-Wert von der ODOmetrie[links]
          messdaten [1][i] = (unsigned char) ADC-Wert von der ODOmetrie[rechts]
          i++;
       }
       else
       {
          fertig = 1;
       }
    }
    Hoffentlich hilft dir das.
    Lieber Asuro programieren als arbeiten gehen.

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress