Hallo allerseits,
ich habe mich in das AVR Assembler Tutorial eingearbeitet und teste mit
einem ATMega. Leider sind mir jedoch -auch nach Recherche hier- folgende
Fragen offen geblieben:
1. Welcher Unterschied besteht zwischen den R0 - R15, und R16 - R31?
2. Wenn eine externe Datei im Programm eingebunden wird, z.B.
.include "Unterprogramm.asm"
-> Wo wird dann der Programmtext des Unterprogramms eingebunden bzw.
in den Flash geschrieben?
-> Ist die Stelle der Einbindungsdirektive im Programm wichtig für
die Programmausführung?
3. Welche Bitmaske wird mit folgenden Befehlen und wo generiert:
.equ TWI_RECV_ACK = (1<<TWIE) | (1<<TWEN) | (1<<TWINT)
oder CaptBuf: .byte FFT_N*2
4. DesWeiteren wäre ich jemanden sehr dankbr, wenn er ein kleines
Beispielprogramm in die Antwort anhängen könnten, mit dem man einen
Analogwert am ADC Port des ATMega8 einlesen kann und dann im 4-Bit
Modus im LCD wieder ausgeben kann. (Ich finde das fehlt noch im
Tutorial)
Mir (und sicher auch anderen Anfängern) wäre für die punktweise
Beantwortung der Fragen sehr geholfen. Vielen Dank schon mal und noch
einen schönen Tag.
Gruß
Jan Purrucker
Hier eine kleine, einfache Routine für ADC:
ADCRead:
sbis ADCSRA,ADEN
rjmp ADCEnable
sbic ADCSRA,ADSC
ret
in r16,ADCL
in r17,ADCH
sts ADCVal,r16
sts ADCVal+1,r17
sbi ADCSRA,ADSC
ret
ADCEnable:
outi ADMUX,0b01<<REFS0|0<<ADLAR|0b00000<<MUX0
outi ADCSRA,1<<ADEN|1<<ADSC|0b0111<<ADPS0
ret
.dseg
ADCVal: .byte 2
Aufruf erfolgt zyklisch mit "rcall ADCRead".
ADCRead kümmert sich selbst um alles, ist der ADC noch nicht Enabled
wird er Enabled, ist der ADC fertig wird der ADC-Wert aus ADCL und ADCH
ausgelesen, in die Variable ADCVal (SRAM) geschrieben, für spätere
verarbeitung, und der nächste ADC-Scan gestartet.
Natürlich ist der ADC-Wert nach der Routine auch in r16:r17.
Momentan wird der ADC auf 1/128 Prescaler eingstellt, was bei 8MHz ca.
4,5KHz entspricht und für triviale Spannungsmessung/überwachung
ausreicht. Kanal 0 (ADC0) ist als Eingang voreingestellt.
Diese beiden Parameter lassen sich bei den Bits "<<MUX0" und
"<<ADPS0" entsprechend anpassen (siehe Datenblatt).
Möchte man mehrere ADC-Kanäle Scannen, kann man das evtl. noch hinein
programmieren.
MfG
Andi
Immer diese Macros die keiner hat :D
Sollte für die Allgemeinheit natürlich so aussehen:
ADCRead:
sbis ADCSRA,ADEN
rjmp ADCEnable
sbic ADCSRA,ADSC
ret
in r16,ADCL
in r17,ADCH
sts ADCVal,r16
sts ADCVal+1,r17
sbi ADCSRA,ADSC
ret
ADCEnable:
ldi r18,0b01<<REFS0|0<<ADLAR|0b00000<<MUX0
out ADMUX,r18
ldi r18,1<<ADEN|1<<ADSC|0b0111<<ADPS0
out ADCSRA,r18
ret
MfG
Andi
1. R0...R15 lassen sich nicht mit Konstanten ansprechen (kein ldi...)
R16...R31 lassen sich auch mit Konstanten ansprechen (ldi...)
2. Der Text der Includedatei wird dort eingefügt, wo die Direktive
steht. Es ist also wichtig. Ein Include von Programmcode vor
der Interrupt-Vektortabelle wäre fatal.
3. 1<<x bedeutet, dass eine 1 um x (Binär-)Stellen nach links
geschoben wird. Über Menü, Help, Tools, AVR-Assembler (im AVR-
Studio gelangst du zu weiteren Informationen über Operatoren und
Direktiven, Hilfe zu ASM-Befehlen gibt es mit F1 während der
Cursor auf dem "hilfebedürftigen" ASM-Befehl steht.
4. Ein kleines Programm zum fleißigen Analysieren ist im Anhang.
...
andi k.
schau dir mal die lcd-routine in winavr-c von peter fleury.
um ein display anzusprechen brauchst du den code.
er sieht nur so lang aus, weil da kommentarzeilen zwischen sind und
leerzeichen.
mfg pebisoft
Und was hat BASIC mit AVR-Assembler-Fragen zu tun???
hannes ganz viel du arsch....
bist wohl auch wieder so ein langweiler der keine arbeit hat.
ein sozialer trittbrettfahrer was.
mfg pebisoft
Jetzt halt mal die Luft an!
Das kann doch echt nicht sein, das Du hier auf diese Art vom Thema
abschweift!
Es ging hier ursprünglich um ASM, und zwar NUR ASM. Klar macht Basic
aus Basic-Code ASM-Code aber mit viel drum herum und uneffektiv.
Sicher überlässt Du komplexere Dinge lieber FastAVR für Dich in
ASM-Code umwandeln den Du dann leicht abgeändert oder blind in Deine
ASM-Codes mit einbindest nur weil Du ZU FAUL bist, effektiven ASM-Code
selbst zu erzeugen!
MfG
Andi
ihr beide seid doch schon das untere niveau.
mir ist hier öfters schon aufgefallen das das unterste soziale pack
ohne geld und perspektiven hier die sau rauslässt. auf das soziale sofa
legen und dann hier noch rum tönen, noch nichts im leben erreicht,
vielleicht auch noch arbeitslos und faul rumhängen anstatt anderen
vernünftig zu helfen. es wäre besser wenn ihr hier aus diesem thread
verschwinden würdet. wagt es nur nicht eure unsinnigen sachen in den
anderen forum unterzubringen. verkrümnelt euch und lasst die leute in
ruhe und mit euren scheiss zwischenbemerkungen. vielleicht habt ihr
sogar noch auf staatskosten studiert.
mfg pebisoft
@Peter:
Mit "Niveau" meinte ich weder dein Haus, noch dein Auto, noch deine
Fachkompetenz, sondern nur deinen Umgangston. In unserem Alter (wir
sind etwa gleich alt) sollte man sich etwas anders ausdrücken können.
Gruß...
...HanneS...
Lasst mal gut sein. Dieser "pebisoft" stänkert auch öfters im
roboternetz-Forum herum. Zu mehr ist dieser Kleingeist wohl nicht
fähig.
Ein Assembler-Listing aus einem Basic-Compilat zu Posten - das sagt
doch schon alles. Keine Ahnung von nix, aber großes Maul. Sieht mir
ganz nach einem 12-jährigen aus, der auch mal mitreden will.
Moin Axel...
Du hast es ja noch genauer getroffen...
Ist aber für mich kein Grund, da mal hinzufahren, da, wo sich Vögel,
Füchse und Bundeswehr die Hand reichen. ;-)
Vielleicht hat der Peter ja einfach nur ein Bier zuviel im Ba(u)ch
gehabt. Soll ja mal vorkommen. Ist auch kein Problem, kann man ja
hinterher wieder in Ordnung bringen.
...
ihr solltet aber ruhig mal aus eurem schrebergarten-niveau rauskommen.
wenn man nur im keller am avr rum oxydiert und fast das tageslicht
nicht seht, verpasste ihr zuviel. ich habe den eindruck das ihr nicht
mehr als dieses forum kennt mnit einer art vetternwirschaft und
versucht nun eure paar erlenten fähigkeiten als kunst anzubieten als
wenn es keine andere gäbe. ich habe hier im forum sehr oft gelesen, das
schüler, die eine frage mehrmals gestellt hatten in die ecke blamiert
worden sind von euren mitvettern, mit blöden antworten. so etwas hasse
wie die pest.wenn ihr im leben, wie ihr es gelebt habt noch nichts
vernünftiges erreicht habt , wird es zeit daran zu arbeiten.
mfg pebisoft
zum roboternetzforum.de.
dort gibt es genau solche schwachmaten und soziale schnorrer wie hier
auch. wollen ein roboter bauen und betteln um adressen für raubkopien.
und feilschen um einen euro beim platinen kauf.
reden über dinge , die sie garnicht besitzen und freuen sich noch das
sie einen übers ohr gehauen haben.
mfg pebisoft
@Peter Bi...:
Die von dir angesprochenen Dinge mag ich auch nicht.
Wenn ich mit einem Tip oder Hinweis helfen kann, dann tu ich das gerne.
Komplettlösungen gibt es von mir nicht, da ich selten genau die Dinge
realisiert habe, die der Fragesteller realisieren möchte.
In diesem speziellen Fall (Jan seine Fragen) habe ich die ersten Fragen
korrekt beantwortet und dabei auf Quellen weiterer Information verwiesen
(z.B. auf die Holfe zu AVR-Studio, die recht ergiebig ist). Der Frage
nach dem ADC-Wert zum Display bin ich halb ausgewichen, denn ich hatte
einerseits kein fertiges (und erprobtes) Beispiel da, andererseits hat
Jan ja das Tutorial durchgearbeitet, ist also durchaus selbst in der
Lage, das LCD anzusteuern. Ich lieferte lediglich ein Programm, welches
den ADC ausliest (und anderweitig, hier als PWM, auswertet). Sicher ist
damit die Frage nach der Umwandlung des Zahlenwertes in den
ASCII-String noch nicht gelöst, aber das wäre einer der nächsten
Beiträge gewesen. Abgesehen davon, dass es dazu in der Codesammlung
gute Beispiele gibt. Auch ich hatte mal ein halbfertiges Printsystem
für LCD gepostet, allerdings nicht in der Codesammlung, dazu sind meine
Codes noch nicht gut genug.
Also, ich helfe gern, mach aber nicht unbedingt anderer Leute Arbeit
alleine. Wenn es sich um Hausaufgaben handelt, dann unterstütze ich
auch nicht die Faulheit des Schülers. Auch die Codeschnorrer blitzen
bei mir ab, wer seinen Code zusammenschnorrt, kommt eh nicht damit
zurecht. Man muss zwar nicht unbedingt das Rad neu erfinden, aber es
hilft ungemein, wenn man seine Wirkungsweise versteht und
nachvollziehen kann.
Sicher gab es auch schon Situationen, in denen ich spitze Bemerkungen
abgelassen habe (allerdings nicht mit dem Wortschatz der Gosse, das ist
nicht unbedingt mein Niveau). Dies aber nicht gegenüber wissbegierigen
Anfängern, sondern mehr gegenüber sich selbst überschätzenden Leuten,
die riesige Projekte realisieren wollen, ohne sich um die Grundlagen
oder die Naturgesetze zu scheren. Irgendwie erkenne ich meist an den
Fragen, ob sich der Fragesteller schon selbst bemüht hat, die Frage zu
beantworten.
Meine Bemerkung zu BASIC hatte auch einen Hintergrund:
Da kommt Jemand, der sich nicht zu schade für Assembler ist, und stellt
berechtigte Fragen (Fragen, die wir alle einmal hatten). Endlich wieder
mal Einer, der sich selbst Gedanken machen möchte und verstehen möchte,
wie es funktioniert. Und dann stellt ihm jemand 13 BASIC-Zeilen und als
Übersetzung ein riesiges ASM-Listing gegenüber. So nach dem Motto: Wer
wird sich denn diese Arbeit (ASM) machen, wenn man das mit 13
BASIC-Zeilen erschlagen kann. Das muss doch demotivieren. Das kommt
doch auf das Gleiche raus wie: Wozu das Einmaleins lernen, wo es doch
billig Taschenrechner gibt.
...