-
-
Erfahrener Benutzer
Roboter-Spezialist
M32 bin ich zu blöd?
Hallo. versucher ein programm zu basteln aber irgendwie will es nicht.
struktur des programms:
hauptschleife:
gosub daten lesen
gosub daten auf RS232 aufrufen
loop
end
timer1: (1hz)
werte verändern
return
timer0: (500hz)
ausgabe der werte auf einem 7-segment (nacheinander)
return
wenn ich timer0 aktiviere geht gar nichts mehr, ist 500 hz zu oft? der m32 läuft bei 4 mhz intern
-
Erfahrener Benutzer
Roboter Genie
Hi!
Hm. Wie groß sind deine Stacks?
Do
...
Loop
Du weist schon, oder?
Ganz liebe Grüße,
Tobi
*EDIT*
Hast du die Interrupts für den Counter aktiviert?
(Also, dass das funzt?)
Was willst du eigentlich machen? wa machen die Timer?
eine ISR auslösen doch hoffentlich!?
-
Erfahrener Benutzer
Roboter-Spezialist
Also timer0 ist dafür da, das die zwei 7 segment anzeigen gemultiplext dargestellt werden...
ich lese daten von einem anderen controller ein, und gebe diese auf RS232 aus (zeitgleich auf der 7 segment) -> nacheinander der dezimalpunkt zeigt den zustand zum wert an...
brauch ich um sicher zu gehen externe pullups an den eingängen?
wie berechnet man den stack?
do
loop
--> ist mir klar.
timer1 wird als timout counter benutzt.
-
Erfahrener Benutzer
Robotik Einstein
Wenn man mal davon ausgeht, das UART bei dir sonst geht, INT eingeschaltet ist usw... (schau dir mal das Programm rnAvr an. damit kannst du die Timervorgeben und Teiler einfach berechnen lassen), fallen mir 2 Sachen auf:
1. 500Hz bedeutet jede 2mS wird die ISR aufgerufen. In der Zeit müssen die anderen Programmschritte abgelaufen sein können (ist möglich, je nach Programm).
2. Jede Sekunde sollen 2 ISR aufgerufen werden. Einmal die für 1Hz und die für 500Hz.
ausgabe der werte auf einem 7-segment (nacheinander)
Mit 500Hz??? 15Hz etwa reichen schon, um deinen Augen ein laufendes Bild vorzutäuschen, ohne das man viele Einzelbilder nacheinander sieht.
Wenn das Programm so laufen sollte und die Werte sich immer ändern, wirst du alle 7 Segmente immer dauerhaft leuchten sehen bei 500Hz!
Aber wenn es wirklich so seien soll, würde ich nur ein Timer für 500Hz nehmen und einZähler jedesmal inder ISR auf 500 hochzählen lassen.
Wenn 500 erreicht ist, GOSUB FUNKTION1HZ und du hast ein Timer gespart
-
Erfahrener Benutzer
Roboter Genie
HI
Den Stack kannst du mit Options -> Compiler -> Chip einstellen.
Da gibts
- HW Stack
- Soft Stack
- Framesize
Verdopple alle Werte mal.
Denn wenn du mit gosub bzw. goto in die Tiefe springst, merkt sich der AVR die Addresse wo er gerade war im Stack. Dann kann er mit return wieder dorthin springen.
Wenn du sonst irgendwelche Interrupts benutzt (Timer), zählen auch noch die ISRs mit.
Ganz liebe Grüße,
Tobi
-
Erfahrener Benutzer
Roboter-Spezialist
Hallo,
danke für die antworten..
Also 500 hz war nur für den wechsel von der einen 7 segment zur anderen. werde den wert mal runter nehmen auf 20. es soll auf gar keinen fall flackern... Was angezeigt wird, wird von dem 1 sekunden timer geändert. werde das mal mit dem hochzählen bis 20 probieren und den 1 timer sparen. macht das ganze wirklich übersichtlicher...
ändere zudem noch was an der hardware. mal schauen
-
Erfahrener Benutzer
Robotik Einstein
Versteh ich jetzt nicht. Das ganze ist doch kein RAM, das immer ein Refreshzyklus braucht?!
Die Werte, die angezeigt werden sollen, ändern sich jede Sekunde. Dann reicht es doch auch, wenn jede Sekunde die 7 Seg.-Anzeige neu gesetzt wird?
Flackern wäre in diesen Fall ja nur, wenn man das ein- und ausschalten der einzelnen Segmente sehen würde.
Und das lässt sich ja in wenigen Takzyklen machen. Kannst ja ausrechnen, wie schnell das bei 4MHz ungefähr passiert.
-
Erfahrener Benutzer
Roboter Genie
HI
Das ist schon richtig. Aber sebastian.heyn möchte die Segmentanzeige wohl gemultiplext ansteuern. Und dazu braucht er eine art Refreshsignal.
Vorteil dabei: verbraucht VIEL weniger IOs.
Ganz liebe Grüße,
Tobi
-
Erfahrener Benutzer
Robotik Einstein
Das stimmt wohl
Aber ein paar Zeilen mehr Code. So sind 20Hz wohl doch besser als 500Hz. Zumindest wenn der M32 mit 4MHz läuft. Sonst ist ja fast nur die ISR am laufen und der Rest hängt hinterher.
-
Erfahrener Benutzer
Roboter Genie
Hi
Genau. Aber lieber ein paar Zeilen mehr code als n mal so viele IOs.
Und beim M32 ist das eh egal.
Grüße!
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen