Hallo, wiedermal das leidige Thema Programmiersprache des AVR. Ich habe mal FASTavr getestet und komme da eigentlich gut mit zurrecht. Erzeugt wirklich sehr kleinen Quell-Code. Kostet allerdungs ca. 120 als Vollversion und hat nur englische Anleitung und Beispiele. BASCOM erzeugt, im Vergleich, grossen Quellcode, preislich liegt es ähnlich. Wer hat Erfahrung, evtl. günstige Bezugsquellen, vielleicht ganz andere Basic-Compilier, ich als alter C-Controller kann mich nicht an C oder gar Assembler gewöhnen. Gruss Alexander
Hi, ich würde Dir zu Bascom raten. Die Vollversion interressiert doch nur für größere Programme. Bei größeren Programmen büßt FastAVR seinen Vorteil wieder ein, und produziert bei größeren Projekten längeren Code als Bascom. Ich habe unter Bascom eine Klimasteuerung programmiert, als der Speicher fast aufgebraucht war FastAVR genommen und total enttäuscht gewesen. Anfänglich war der FastAVR-Code um 20% kleiner, ab 3kB etwa gleich, dann schlechter. Aus 7.5kB(Bascom) wurden 8.5kb(FastAVR). Es wurden u.a. Tasten, LCD, A/D, I2C, DS1621, Basic+ASM Routinen verwendet. Aufgefallen ist das Bascom mit Zeichenketten sehr effektiv umgeht. Doch hat FastAVR einen Vorteil den ich gern nutze. Es produziert top lesbaren und KOMMENTIERTEN ASM-Quelltext, der sich in seiner Struktur an das Basiclisting anlehnt. Es ist als ASM-Lehrer für BASIC-Kundige unschlagbar. cu tb
Hallo, ja, ich habe jetzt FASTavr und bin auch von den Mühen des Programmierers entzückt, es gibt eine sehr umfangreiche Newsgroup und Mailinglist, auch hier wird fleissig weitergearbeit. Ich habe mich auch lange mit dem vertreibenden Ingenieurbüro darüber unterhalten und habe mich (zwar zähneknirschend) zum Kauf entschlossen. Gruss A. Arndt www.AR-Online.de, hier entsteht ein AVR-Basic-Forum, reinschauen...
hallo, was für projekte erstellst du mit fastavr. wie kann man in fastavr rc5-code senden, ich sehe nur eine routine zum empfangen. ich habe einen robby mit: kompas cmps03, tsop1736, lcd, srf04, srf08, sharpsensor, motorantrieb rs232 funk usw. dieses möchte ich alles mit fastavr ansteuern können wenn ich es mir beschaffe. kannst du ein bisschen berichten. mfg pebisoft
ich habe jetzt fastavr ausreichend getestet. ein toller compiler. er erzeugt hex-code und auf wunsch auch asm-code für avrstudio4 (avrstudio erzeugt den gleichen code weil es die gleichen compiler sind: asm32avr)und zum selberfiltern , wenn man noch eingreifen möchte. und das testen mit dem avrstudio ist spitze. so etwas habe ich schon lange gesucht. den code von bascom kann man nicht astrein filtrieren und hier und da noch nach optimierungen suchen. bascom hat zwar einpaar mehr routinen, aber diese sind nicht das gelbe vom ei. z.b. sind die lib-dateien von bascom veraltet und die neuen muss man bezahlen. der bascom simulator ist nur ein darsteller der aber nicht die genauen werte ausgibt wie avrstudio, er zieht nur eine sichtbare show ab. Bascom habe ich wieder verkauft und habe mir jetzt fastavr bestellt. da ich auch in win-avr-c geproggt habe fällt es mir leicht, die routinen in fastavr umzusetzen. in fastavr kennt die programmierfreiheit keine grenzen. habe jetzt schon fast alle robotersensoren angesprochen. da ich z.z noch die demo habe, kann ich jedes modul nur einzeln proggen, aber es funktioniert. ich wollte immer ganz nah am asm-sourcode sein, war aber zu kopliziert diesen zu schreiben. jetzt lernt man auch sehr viel vom asm-code. mfg pebisoft
Hallo Gibt es für FastAVR oder Bascom auch deutsche Anleitungen/Bücher? Könnt ihr kurz zusammenfassen, für welchen Anwender Bascom sinnvoller ist (oder umgekehrt)? Danke moin
Von Klaus Kühnel gibt es ein deutschsprachiges Buch zu Bascom-AVR: http://www.amazon.de/exec/obidos/ASIN/3907857046/qid=1125681007/sr=2-1/ref=sr_2_9_1/028-6505235-8012536
bascom ist für leute die drauf los proggen wollen und schnell mal das ergebnis zusehen. stellt keinen asm-sourcecode her. hat mehr wörter als fastavr, ist langsam in der ausführung , schleppt zuviel ballast mit rum. fatsavr ist für leute , die sich mit dem kleinen avr auseinandersetzen wollen. kleine feinheiten herauspicken, präzise timing, den avr sozusagen damit beherrschen. stellt asm-sourcre-code her zum nachvollziehen. ist von der tiefe her fast wie winavr-c, auch so schnell aber in den wörtern nicht so schwierig. weil es die tiefe hat wie winavr-c habe ich jetz nach dem verkauf von bascom fastavr gekauft. ich bin 57 jahre alt und habe viel zeit , bin pensionär. von fastavr habe ich sehr spät gehört, schade. aber jetzt habe ich es. wenn du länger proggen willst, wirst du merken, das du mit bascom bald am ende bist, da fängt dann fastavr erst an interessant zu werden. wenn du nur einmal schnuppern willst und eben mal schnell was proggen willst, ohne das du wissen möchtest wie man hier und noch einmal in code was tunen kann, dann ist bascom für dich die richtige wahl. mfg pebisoft
Da ich auch manchmal in ASM programmiere, ist dann wohl FastAVR besser für mich. Gibt es auch gute Turorials oder Bücher für dieses Programm? Viele Grüsse moin
bücher brauchst du nicht. die hilfedatei mit den beispielbefehlen ist sehr gut. was du brauchen tust ist ein buch über den avr mit den resterinhalten und timereinstellungen, pwm, kompare usw. ich habe vorher auch immer nach bücher ausschau gehalten, die mir die progsprache erklärten. dann habe ich festgestellt, das basic kann ich doch ist doch ein alter hut, wo ich dann immer nachschaue , auch jetzt immer noch kräftig, wie muss ich welche register einstellen und interrups starten, zähler aufrufen usw. das avr-buch (deutsch) liegt immer neben mir auf dem tisch. schau im roboternetzforum unter bücher, dort werden einige beschrieben. die bücher für den avr speziell sind nicht billig. mfg pebisoft
Die ASM-Ausgabe von FASTAVR ist meines Erachtens nicht zum Erlernen von ASM geeignet, da nicht wirklich effektiver Code erzeugt wird, wie anhand eines einfachen Beispiel unschwer zu sehen ist: Multiplikation von 2 Byte Variablen und Addition einer Konstanten Zahl auf einem AVR mit HW-Mul: B1 = B1 + B2 + 5 Dim B1 as Byte, B2 as Byte B1 = B1 + B2 + 5 FASTAVR erzeugt hier: ;-Line--0014----b1 = b1 * b2 + 5-- lds zl,b1 push zl lds zl,b2 pop r24 mul zl,r24 movw zl,r0 push zl ldi zl,Low(5) pop r24 add zl,r24 sts b1,zl Es wird eine Variable (b1) zuerst in das zl-Register geladen und dann mit push und pop über den Stack in das register r24 verschoben, anstatt diese gleich in das register r24 zu laden. Um dann zum Ergebnis der Multiplikation (in r0) die Zahl 5 zu addieren wird dieses mit einem Word-Verschiebe Befehl in das zl-Register verschoben, dort kann es aber nicht bleiben, da die Konstante 5 auch in dieses Register geladen wird. Daher das gleiche Spiel wie zu Beginn mit dem Verschieben in das r24-Register mit den Umweg über den Stack bevor die Addition vorgenommen wird. Das Ergebnis hätte aber ohnehin in r0 verbleiben können, anstatt es höchst ineffektiv zweimal weiter zu verschieben. Auch die Verwendung von Pointer-Register (hier Z) zur Zwischenspeicherung von Variablen lässt meines Erachtens nicht auf ein durchdachtes durchgängiges Konzept schließen. Ein effektiver Code könnte z.B. so aussehen: lds r24, b1 lds r24, b2 mul r24, r25 ldi r24, 5 add r24, r0 sts b1, r24 FASTAVR hat einen um 75% größeren Code mit sogar doppelter Ausführungszeit. Die ASM-Ausgabe von FASTAVR ist zwar ein nettes Feature, führt aber einem ASM-Anfänger sicher nicht zu einem effektiven Programmierstil in ASM.
Ich denke, man muss das immer im ganzen sehen: Da spuken schliesslich noch mehr Routinen umher und das Umgelade aus dem Zl register ist sicher mit dem Softwarestack begründet. Denn was passiert, wenn Du B1 und B2 als Integer deklarierst und mit 50000 addieren willst? Das hier:
1 | ;-Line--0011----B1 = B1 * B2 + 50000-- |
2 | lds zl,b1 |
3 | lds zh,b1+1 |
4 | push zh |
5 | push zl |
6 | lds zl,b2 |
7 | lds zh,b2+1 |
8 | pop r24 |
9 | pop r25 |
10 | call M1616 |
11 | push zh |
12 | push zl |
13 | ldi zl,Low(50000) |
14 | ldi zh,high(50000) |
15 | pop r24 |
16 | pop r25 |
17 | add zl,r24 |
18 | Adc zh,r25 |
19 | sts b1,zl |
20 | sts b1+1,zh |
21 | |
22 | ;-Line--0015----Do ' place your code in next line-- |
23 | L0000: |
24 | |
25 | ;-Line--0017----Loop-- |
26 | rjmp L0000 |
27 | L0001: |
28 | |
29 | ;****** End OF USER BASIC CODE **************** |
30 | |
31 | |
32 | ;////// 16x16 hardware multiplay ///////// |
33 | M1616: mul zl,r24 |
34 | movw r22,r0 |
35 | mul zl,r25 |
36 | add r23,r0 |
37 | mul zh,r24 |
38 | add r23,r0 |
39 | movw zl,r22 |
40 | ret
|
41 | |
42 | ;System Global Variables: 0 bytes |
43 | ;User Global Variables: 4 bytes |
Da ist nunmal so eine Struktur bei FastAVR drinne. Zum Lernen ist das nichts, da gebe ich Dir Recht!! Geht bei BASCOM eigentlich B1*B2+5 in einem Zug? Es gibt noch viel schlimmere Sachen als unnötig lange Ausführungszeiten bei mathematischen Operationen. Angenommen ich will wissen, ob es einen Watchdog reset gab. If MCUCR.WDRF then Reset MCUCR.WDRF mach_dies() Else mach_jenes() End if erzeugt diesen Code:
1 | ;-Line--0012----If mcucr.wdrf Then-- |
2 | in r24,MCUCR |
3 | sbrs r24,WDRF |
4 | rjmp L0001 |
5 | L0002: |
6 | |
7 | ;-Line--0013----mach_dieses()-- |
8 | call mach_dieses |
9 | |
10 | ;-Line--0014----Else-- |
11 | rjmp L0000 |
12 | L0001: |
13 | |
14 | ;-Line--0015----mach_jenes()-- |
15 | call mach_jenes |
16 | |
17 | ;-Line--0016----End If-- |
18 | L0000: |
Was passiert aber nun, wen ich es genau andersrum machen will, so in der Art: If NOT MCUCR.WDRF then mach_jenes() Else RESET mcucr.wdrf mach_dieses() End if Gibt erstmal 'ne Fehlermeldung - sieht man sich den ASM Text an, weiss man auch warum:
1 | ;-Line--0012----If Not mcucr.wdrf Then-- |
2 | in r24,MCUCR |
3 | sbrc r24,0x0WDRF |
4 | rjmp L0001 |
5 | L0002: |
6 | |
7 | ;-Line--0013----mach_jenes()-- |
8 | call mach_jenes |
9 | |
10 | ;-Line--0014----Else-- |
11 | rjmp L0000 |
12 | L0001: |
13 | |
14 | ;-Line--0015----Reset mcucr.wdrf-- |
15 | in zl,MCUCR |
16 | cbr zl,0x08 |
17 | out mcucr,zl |
18 | |
19 | ;-Line--0016----mach_dieses()-- |
20 | call mach_dieses |
21 | |
22 | ;-Line--0017----End If-- |
23 | L0000: |
SBRS und SBRC werden unterschiedlich behandelt. "0x" hat da nicht wirklich zum Erfolg geführt.... 1.Beispiel funktioniert - 2.Beispiel nicht/ wie auch 0xWDRF kennt der Assembler nicht, was auch prompt mit einer Fehlermeldung quittiert wird. "1. C:\..\watchdog.asm(24) : error : Garbage at end of line Peek und Poke? peek(&h60+x) z.B. soll gehen, geht aber nicht! temp=&h60+x peek(temp) geht allerdings. usw.usf. Allerdings kann man sehr schnell mit LCD und Tastermatritzen Eindruck schinden. Das stimmt wohl!! Gruß AxelR.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.