Forum: Mikrocontroller und Digitale Elektronik Welche Basic-Software ?


von A. Arndt (Gast)


Lesenswert?

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

von tobiasweis (Gast)


Lesenswert?

hast du mittlerweile fastavr

von thomas b (Gast)


Lesenswert?

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

von A. Arndt (Gast)


Lesenswert?

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...

von pebisoft (Gast)


Lesenswert?

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

von A. Arndt (Gast)


Lesenswert?

Hallo,

nutze jetzt auch BASCOM....

Gruss

von pebisoft (Gast)


Lesenswert?

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

von moin (Gast)


Lesenswert?

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 Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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

von pebisoft (Gast)


Lesenswert?

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

von moin (Gast)


Lesenswert?

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

von pebisoft (Gast)


Lesenswert?

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

von Josef (Gast)


Lesenswert?

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.

von AxelR. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.