PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Umstieg von Basic -> Assembler



kaisobczak
06.04.2005, 20:01
Mohoin,

also ich hab mir gedacht meinen AVR (momentan der 2313) etwas effektiver zu nutzen und auf Assembler umzustellen.
Ich weiß aber nicht so recht wie ich das angehen soll...bisher hab ich mit Bascon AVR programmiert...und dann per ISP das programm rübergeladen...oder halt mit PonyProg das HEX-File das Bascom mir rausgibt...
Nun steh ich bei Assembler wirklich ganz am anfang...ich hab sozusagen die "allergrundigsten" :cheesy: Grundkenntnisse...das aber auch nur vom 8086 her...mit TurboAssembler...nun zu meinen Fragen: kann ich den TurboAssembler weiterbenutzen ?? Muss ich irgendwelche zusätzlichen Files einbinden ?? Und wie bekomm ich das Assembler-Prog in den AVR ?? Ein HEX-File bekomm ich ausm Turboassembler nicht raus :-(
Befehle und Register stehen doch quasi alle im Datenblatt, nech ??

Wär cool wenn mir jemand ein bisschen was dazu erzählen könnte...

Gruß Kai

Gerhard
06.04.2005, 20:18
Hallo Kai,

... ist mir gerade so über den Weg gelaufen:
http://www.mikrocontroller.net/tutorial/

http://www.avr-asm-tutorial.net/avr_de/beginner/index.html
und
http://www.avrbeginners.net/

Evtl. hier es Dir ja weiter.


mfg Gerhard

kaisobczak
06.04.2005, 20:49
okay danke erstmal...

scheinbar muss ich also auf ein Programm wie Atmel-Studio umsteigen...da stell sich eine neue Frage: gibt es ne möglichkeit mit dem Studio die alten STK ISPs zu benutzen ?? Oder eine einfache Möglichkeit aus einem STK200/STK300 einen 500er zu basteln so das das Studio den akzeptiert ??

Kai

PicNick
07.04.2005, 09:21
Ich mach das so, daß ich das Pony Gewehr-bei-Fuß geladen haben, und wenn das AVR-Studio ein .Hex erzeugt hat, klick ich auf Pony und lade es damit. Nicht elegant, aber auf irgendwelche Knöpfe muß ich sowieso drücken, also is mit das eigentlich wurst. Das einzige, was micht etwas nervt, ist das ewige "wollen sie wirklich..." vom Pony. Aber bei allen meinen Sorgen kommt das ganz hinten.

Edit: Noch was: erwarte dir nicht zuviel vom Umstieg. Die Länge der ASCII-Source hat wenig mit der Länge des erzeugten Codes zu tun.

kaisobczak
12.04.2005, 16:39
Mohoin...da bin ich wieder...

ich hab mir mal die genannten Links reingezogen...hauptsächlich die Programmbeispiele in Assembler weil was register ect sind wusste ich ja wohl schon...
nun häng ich beim http://www.mikrocontroller.net/tutorial/ fest...genauergesagt bei den LCD Routinen...das meißte davon kann ich gut nachvollziehen nur die stelle an der das zu übertragende Byte in Nibbles aufgespalten und übertragen wird geht mir nicht in den Kopf...

im Unterprogramm lcd_command zB soll das Byte 00101000 (befindet sich in temp1) übertragen werden...nun wird da als erstes ein backup von temp1 in temp2 angelegt und dann werden die nibbles mit swap getauscht...aus 00101000 wird also 10000010, richtig ?! Das wird damit begründet das das obere Nibble zuerst übertragen wird seine Datenleitung jedoch an den unteren 4 Bits des Ports angeschlossen sind...als nächstes wird dann das (jetzt) obere nibble auf 0 gesetzt und danach wird das ganze byte (00000010) an den port übertragen...dann geht das spiel von vorne los...nur halt mit dem backup temp2 und ohne swap...übertragen wird also nun 00001000, ist das so richtig ?? Ich weiß garnicht genau wie ich meine frage formulieren soll...ich glaub ich kapier einfach diese 4Bit übertragung nicht... Wenn ich nun nicht die unteren 4Bits vom Port benutzen würde müsste ich swap bei der Übertragung vom zweiten Nibble anwenden anstatt bei ersten ?! Villeicht kann mir ja jmd mal ein bisschen was dazu erzählen :-)

Achja und eins noch: Im Unterprogramm lcd_init sendet er einige funktionsbytes...zB 4 Bit Modus einstellen...die letzten 3 Bitmuster kann ich nicht einordnen...und er hat die nur mit "nochwas einstellen" ect kommentiert :-) Weiß jmd was genau er da einstellt ??

Danke schonmal und Gruß

Kai

uwegw
12.04.2005, 17:00
an diese stelle wird das lcd (das einen eigenen controller besitzt, der die datren entgegennimmt und anzeigt) richtig eingestellt. die dafür genau nötigen befehle findet man im datenblatt des displays... wenn du also die komplette lcd-routine in deine programme einbinden willst ist es nicht weiter wichtig hier genauer bescheid zu wissen... du müsstest dich eigentlich nur näher damit befassen wenn du selbst eine lcd-routine komplett neu schreiben willst...

kaisobczak
12.04.2005, 17:13
hollerö...
ja genau...nur im Datenblatt kann ich das nicht zuordnen !!
Und doch klar muss ich genauer bescheid wissen: Diese Routinen sind doch auf die Pinbelegung des Programmierers gebunden...ich muss sie ja eh umschreiben wenn ich diese Pinbelegung gerade nicht benutze...aus welchem Grund auch immer...außerdem geht es mir hier nicht darum das Rad neu zu erfinden...ich bin dabei mich in Assembler einzuarbeiten...das zu lernen...und dabei nehm ich sowas nicht so einfach hin...und meinst du nicht auch das jemand der sich Programmierer nennt solche elementaren Sache wie eine LCD Routine selber schreiben können sollte ?! :-)
Aber egal...ich hätts einfach gerne genauer gewusst :-)

kai

meltronik
12.04.2005, 17:40
im lcd datenblatt ist es wirklich etwas verwirrend...
bei dem flussdiagramm für die 4bit initialisierung im datenblatt sind ja zwei zeilen pro befehl wobei du jeweils die zahlen in der spalte DB7-DB4 zusammensetzt und du dann das im tutorial angegebene bitmuster erhältst...

das erste datenpacket stellt die zeilenanzahl und den zeichensatz ein
das zweite byte schalten das display ein
und der dritte setzt den entry mode also ob zb. der displayinhalt geschobeb wird...

meltronik
12.04.2005, 17:50
zur 4bit übertragung:

in dem tutorial werden die vier unteren port pins (P3-P0) verwendet und an DB7-DB4 des lcds angeschlossen...
da zuerst das oberen nibble geschickt werden muss, muss man beim senden von zb. 01010000 eben verteauschen sodass 0101 an P3-P0 anliegt. danach wird dann der im zweiten register gespeicherte original wert verwendet. der braucht nun nicht mehr vertauscht werden sondern kann nach nullsetzten der oberen nibbles direkt auf P3-P0 gelegt werden...

also würde man die oberen vier ports P7-P4 verwenden müsste man beim ersten mal nichts tauschen aber beim ausgeben des zweiten unteren nibbles....

Gerhard
12.04.2005, 17:58
Hallo Kai,
hier habe ich eine verständliche Anleitung zu LCD's und deren Initialisierung zum 4bit Betrieb gefunden.

http://www.sprut.de/electronic/lcd/index.htm

Evtl. hilft esDir weiter.

mfg Gerhard

Edit: hier noch ein Tut zum Assembler auf AVR's:

http://www.avr-asm-tutorial.net/beginner_de.pdf

kaisobczak
14.04.2005, 08:17
Hollerö...

erstmal möchte ich mich für eure antworten bis hierhin bedanken...ihr habt mir schon ein ganzes stück weitergeholfen...

Mit dem heutigen Morgen bricht nun Tag 3 an, an dem ich quasi ausschließlich über den LCD-Routinen gehockt hab...gestern abend hab wollte ich die Routinen von http://www.mikrocontroller.net/tutorial/ auf meinen 2313 anwenden (hab sie natürlich an meine Portbelegung angepasst)...leider ohne erfolg...ich denke das Prinzip der Routinen stimmt...habs eigentlich ja nur abgekupfert :-) aber mit den Bitmustern stimmt doch irgendwas nicht...
Gerade eben hab ich im tutorial http://www.avr-asm-tutorial.net/avr_en/LCD4INCE.html gesehen das da nicht nur die bitmuster (das wird wohl an anderer hadware liegen) anders sind, sondern auch deren übertragung... Zu anfang sind beide Beispiele ziemlich gleich: http://www.avr-asm-tutorial.net sendet 3x 00111000 und http://www.mikrocontroller.net/ sendet 3x 00110000. bei den ersten 3 Bitmustern braucht man sich ja noch nicht mit swap und andi "aufn Kopf stellen" um sie zu senden, sonder gibt sie auf den Port, "toggelt" das enable bit und fertig...Nach diesen 3 Bitmustern folgt das Function Set (zumindest nach dem Datenblatt von Diplaytech für die 164a Reihe)...Hier gehen die beiden Beispiele dann schon auseinander: http://www.avr-asm-tutorial.net sendet 00101000...diesmal aber schon mit einer Routine die swap und andi benutzt, während http://www.mikrocontroller.net/ 00100000 sendet...aber ganz normal wie die ersten 3 Bytes auch...worin liegt der Unterschied ?? Bin ich nach den ersten 3 Bytes denn schon im 4 Bit Modus, so das ich swap und andi brauche ?? Nö...eigentlich doch nicht...also ist es egal ?! Ich sitze gerade inner Uni deshalb kann ichs nicht ausprobieren...mach ich sofort wenn ich wieder zuhause bin :-)

Naja...jedenfalls geht es dann mit den nächsten 3 Bytes weiter...die werden dann auch wieder von beiden Tutorials mittels swap/andi übertragen...die von http://www.mikrocontroller.net/ kann ich leider immernoch nicht einordnen...die passen zu keinem Bitmuster was ich im Datenblatt finden kann...die von http://www.avr-asm-tutorial.net sind ja beschriftet und die kann man auch sofort im Datenblatt wiederfinden...
Zu diesen 3 Bytes hab ich dann aber auch noch eine Frage: Im Datenblatt folgen dem Function Set (im Flussdiagramm) ja auch noch drei Bytes...da sind es Display Off, Display Clear und Entry Mode...erst danach kommt Initializiation ends...heißt das diese 3 Byte sind für die Ini zwingend erforderlich ??

Als ich die Routinen gestern ausprobiert hab (hab diverse Bitmuster ausprobiert) funktionierte das Display entweder garnicht, mit blinkendem Cursor oder mit zufallszeichen...dann war ich zu frustriert um noch weiter zu machen...hoffentlich könnt ihr mir nochmal den entscheidenen tipp geben :-)

Boa...wieder viel text geworden...ich hoffe es liest das überhaupt noch jemand :-)

Danke und Gruß

Kai