PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Brauche mal einige Tips beim Programmen von Ports



PsychoElvis64
03.11.2006, 13:21
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.

Marco78
04.11.2006, 00:22
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.

PsychoElvis64
04.11.2006, 11:05
Danke super für die schnelle Antwort!

PsychoElvis64
05.11.2006, 21:53
Gibt es noch eine Seite in der sich mit BASCOM beschätigt wird?

Marco78
05.11.2006, 21:55
Kommt drauf an, was du genau wissen willst.
Hast du es schonmal mit Google probiert???

PsychoElvis64
05.11.2006, 22:10
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

Marco78
05.11.2006, 22:28
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.

Dirk
05.11.2006, 22:32
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

PsychoElvis64
05.11.2006, 23:03
Okay danke :-)! Einen schönen Abend noch !