-
-
Erfahrener Benutzer
Begeisterter Techniker
Brauche mal einige Tips beim Programmen von Ports
Hej Leute,
nur ne kurzes Anliegen:
Ich habe gerade ein kleines Fahrgestell mit einen Mega16 gebastelt, leider fehlen mir noch einige Sensoren und Erweiterungen, so lange wollte ich die noch freien Ports mit LED´s besetzen und sie einfach nur Blinken lassen.
Also ich will ja nun nicht wissen wie ich sie zum blicken bekomme das weiß ich
Ne es geht darum obs möglich ist jeden Port in einer eigenen Schleife zu Programmieren?Oder wie das sonnst funst. Ich beschäftige mich noch nicht all zu lange mit dem Programmieren.
Also danke schonmal.
-
Erfahrener Benutzer
Robotik Einstein
Ich kann die Frage noch nicht einmal nachvollziehen.
Du kannst jeden Port in einer eigenen Schleife programmieren.
Du kannst jeden Port auch in mehreren Schleifen programmieren.
Du kannst auch mehrere Ports in einer Schleife programmieren.
Du kannst auch mehrere Ports in mehreren Schleifen programmieren.
Das ganze ist davon abhänig, was du erreichen willst.
Wenn ein Abstandssensor meldet, das du in wenigen cm gegen etwas fahren wirst, wäre es tragisch, wenn das Programm diese Meldung nicht bekommt, weil es grade damit beschäftigt ist, die Systemzeit um eine Sekunde zu erhöhen und dann zufällig eine Uhrzeit erreicht hat, wo Systemparameter in den EEPROM geschrieben werden sollen oder die Gameboy Cam grade ein Bild machen soll.
Letzeres wäre natürlich nicht schlecht. Dann hast du ein Bild kurz vorm Unfall
Der AVR kann immer nur einen Programschritt auf einmal durchführen. Genau wie ein PC. Aber beim PC sieht es nach Multitasking aus, weil die Rechengeschwindigkeit wesentlich höher ist.
Die bis zu 20.000.000 Befehle pro Sekunde eines AVR sind auch nicht wenig. Aber wenn du irgendwo im Programm ein Wait 3 eingebaut hast, wird an dieser Stelle wirklich drei Sekunden gewartet. Die einzige Möglichkeit das Warten zu unterbrechen ist ein INT.
Bevor du anfängst zu programmieren musst du dir erstmal gedanken machen, was das Programm können soll.
Am besten erstmal überlegen und aufschreiben, was du alles anschliessen willst.
Dann musst du dir überlegen, ob bestimmte Sachen einen bestimmte Hardwarefunktion des AVR belegen (INT, ICP, PWM, ADC, ...).
Dann siehst du auch schon, ob der von dir gewählte AVR reicht oder ein kleinerer oder größerer notwendig ist.
Allerdings musst du die Programmgröße erstmal grob einschätzen um zu sehen, ob alles in den Speicher passt.
Das geht zu anfang natürlich noch nicht und bedarf etwas Zeit bis man sieht wie groß ein Programm wird.
Dann solltest du dir einen groben Programmablauf ausdenken. Überlegen, welche Funktionen Vorrang haben müssen und wie man das erreichen kann.
Am besten ist ein Ablaufdiagramm.
Je besser deine Dokumentation, desto leicher hast du es später beim programmieren und bei der Fehlersuche und beim Erweitern des Programms.
http://www.rowalt.de/mc/index.htm Schau dir mal den Kurs auf dieser Seite an.
-
Erfahrener Benutzer
Begeisterter Techniker
Danke super für die schnelle Antwort!
-
Erfahrener Benutzer
Begeisterter Techniker
Gibt es noch eine Seite in der sich mit Bascom beschätigt wird?
-
Erfahrener Benutzer
Robotik Einstein
Kommt drauf an, was du genau wissen willst.
Hast du es schonmal mit Google probiert???
-
Erfahrener Benutzer
Begeisterter Techniker
Ja da habe ich zwar einiges gefunden aber halt nicht genau das was ich suche.
Hm wie erkläre ich das mal, ich will z.b. an Pord D ein Lauflicht und am Port A einen L298 der zwei DC Motoren immer wieder gleich antreiben soll aber so das die LED´s für sich laufen und die Motoren auch also nicht nach ein ander wie beim Loop
-
Erfahrener Benutzer
Robotik Einstein
Da sind wir wieder beim Multitasking.
Es ist wie im richtigen Leben auch. Vorgefertigte Lösungen für alle Probleme wird man weder im Internet noch in Lehrbüchern finden.
Du kannst z.b. im Hauptprogramm die Motoren steuern und mit einem Timer-INT das Lauflicht weiterschalten.
So wird das Hauptprogramm immer nur kurz unterbrochen.
Wie ich schon schrieb, man muss sich genau überlegt, was zu welcher Zeit gemacht werden soll.
-
Erfahrener Benutzer
Robotik Einstein
Prog
Hallo Psychoelvis,
schwer zu kapieren, was du da willst.
Du kannst z.B. durch einen Interrupt durch einen Timer eine Art "Takt" bilden (z.B. 10 x pro Sek.).
Den nutzt du dann so, dass für die LEDs z.B. jeder 5., für die Motoransteuerung jeder 2. Interrupt genutzt wird, um z.B. auf die nächste LED zu schalten oder die nächste Geschwindigkeitsstufe eines Motors einzustellen.
Das läuft dann regelmäßig ab, aber jede Aufgabe mit einer anderen Geschwindigkeit.
Gruß Dirk
-
Erfahrener Benutzer
Begeisterter Techniker
Okay danke ! Einen schönen Abend noch !
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen