- Akku Tests und Balkonkraftwerk Speicher         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 15 von 15

Thema: Variable nur während interrupt gültig?

  1. #11
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Anzeige

    E-Bike
    Hi !
    Ich mach das im Prinzip so:
    In einer DO .. LOOP schleife frag' ich immer zwei Dinge ab:
    1 Ein Flag vom Timer0 (1mS)
    (der Time0-Interrupt tut nix, außer diesen Flag setzen)
    den lösch ich und geh einmal in die Motor-routinen (links & rechts)

    2 Ischarwaiting vom "config serialin =buffer, size = 64"

    Motorroutine: Jeder motor hat eine Soll- und eine Istposition
    sind die zwei gleich, macht er nix
    wenn nicht, macht er einen Schritt in die richtige richtung und ändert sein "IST"

    Ischarwaiting: holt die Zeichen vom Terminal (solange "ischarwaiting") und ändert dann ggf. die SOLL-Position von einem Motor oder nicht.

    Vorteil (u.A) : du kannst auch "SOLL" ändern, während der Motor schon läuft

    ungefähr klar ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  2. #12
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.06.2004
    Beiträge
    118
    Ich hab nochmal so ne allgemeine Frage. Nicht das ich da wieder nen falschen ansatz hab. Und zwar dreht sichs um die kommunikation mit dem PC. Ich hab das bisher so gemacht das ich alles über die COM-schnittstelle übertrage. Ich übertrag das alles im ASCII Format. Oder ist das bitweise besser? Er sendet dann z.B. ein A und dann den wert. Dann kann ich am pc anhand von dem buchstaben sehen was das jetzt für ein wert war (ob ultraschall, akku, oder infrarot oder so). Dann hab ichs bisher so das der AVR 500ms wartet zwischen jeder übertragung damit auch immer der buchstabe als erstes kommt und er mir die pakete nicht so blöd aufteilt. Allerdings ist das natürlich höllisch langsam. Ist es sinnvoller ein trennzeichen mitzusenden nachdem dann immer ein neuer wert kommt oder vielleicht gleich direkt als bit-werte einlesen, ich hab keine ahnung. Oder sollt ich in meinem (VB)-Programm nochmal einen extra puffer anlegen der dann ab und zu ausgelesen wird? Wie machst du das?
    Danke schonmal für deine Hilfe.
    Gruß, Markus

  3. #13
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Hi, sehr gut wär in ASCII eine CSV-Format, daß kannst du das direkt auch als File schreiben und in Excel einlesen (für Graphik u Diagramme)

    A;0.000<CR><LF>

    also

    PRINT "A;";str(variable)

    für sagen wir 10 Zeichen brauch er zum senden bei 9600 etwa 10 mS
    da brauchst du nicht solange warten. und wait brauchst du schon garnicht

    Für die Umwandlung str(variable) braucht er natürlich Zeit, aber so schlimm ist das auch wieder nicht

    du kannst ja mal probieren

    dim Wordvar as word

    do
    wordvar = getadc(n)
    PRINT "A;";str(variable)
    LOOP

    das fetzt schon dahin
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  4. #14
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.06.2004
    Beiträge
    118
    Hi, danke für die schnelle antwort. Mein größtes problem ist das die USART-Interrupt-routine im meinem VB-Programm am pc ja nur aufgerufen wird wenn ein Paket reinkommt. Wenn ich jetzt ganz viele werte schnell nacheinander schicke, packt er mir die in das gleiche paket (ne, frame... ach egal). D.h. es kommt dan halt ne zahlen/buchstabenkombination rein die irgendwann abreißt wenn das nächste paket anfängt und die interrupt routine nochmal aufgerufen wird. Kann ich das nicht irgendwie so senden das er mir pro wert den ich verschicke genau 1 paket macht? Dann hätt ich mir das suchen nach trennzeichen im empfangenem string erspart und ich wüsste das er immer mit nem buchstaben beginnt. Weißt du was ich meine??? Ich glaub das war jetzt ziemlich verkorkst erklärt. Das CR und LF hab ich abgestellt, ist ja eigentlich überflüssig wenn man pro paket nur einen wert hat.

  5. #15
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Na ja, zwei Möglichkeiten:

    Vielleicht kann man dem VB einen größeren Buffer angeben (ich kenn aber VB zu wenig)

    Oder du pollst. d.h.

    Der AVR schreibt seine Werte ganz einfach in ein jeweiliges (Sensor)-Feld und sonst nix
    Und der VB sendet, wenn er grad Zeit hat, an den AVR zB ein "A", worauf der AVR den Wert, den "A" grad hat, auf die Reise schickt und dann wieder weiter wurstelt, bis z.B. "B" kommt

    Ja, noch eine Variante (on demand): Erst wenn "A" kommt, macht der AVR den Getadc() und schickt den Wert dann
    (schneller als es der VB bearbeiten kann, braucht er's ja eh nicht messen)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

12V Akku bauen