Forum: Mikrocontroller und Digitale Elektronik Umstieg von Assembler auf Bascom


von Florian (Gast)


Lesenswert?

Hi.

Programmiere jetzt seit ca. einem Jahr Assembler.

Hab mir vor kurzen mal das Programm "Bascom-AVR" runtergeladen.
Eigentlich ein super Programm mit vielen Beispielprogrammen. Dann hab
ich mir ein par Beispielprogramme angeschaut. Wow. Wenn ich denk,
wieviele Zeilen Assembler ich schreiben muß, bis ein LCD Display
initialisiert ist, da ist Bascom schon gewaltig.

Klingt jetzt nach einem großen Vorteil, aber da gibts bestimmt auch
Nachteile oder?

Kann mir jemand sagen, ob es Empfehlenswert ist, oder würdet ihr eher
abraten?

Ach ja... Bascom versteh ich halbwegs wenn ich es anschaue, bei C
verstehe ich garnix.

Danke für jede Antwort

Gruß Florian

von Thomas Forster (Gast)


Lesenswert?

Bascom erzeugte bei mir für ein einfaches "Hello World" auf das LCD
ca. 1kB Code.

In Assembler sind es gerade mal gute 100 Byte.

Deshalb bin ich von Bascom auf Assembler umgestiegen.

von Hubert.G (Gast)


Lesenswert?

Damit weckst du Emotionen. Aber an sich hast du dir die Antwort selbst
gegeben.
BASCOM ist leichter verständlich, wenn das Programm etwas komplexer
wird es wieder aufwändig und umständlich, C ist etwas schwieriger aber
dafür auch bei komplexeren Programmen genau so einfach wie bei
einfachen. Aber sieh dir mal das AVR-GCC-Tutorial an.

Hubert

von Thomas (Gast)


Lesenswert?

Ich gebe auch noch meinen Senf dazu.

Ich programmiere bisher nur Assembler. Wenn ich mir das Forum so
ansehe, dann denke ich oft "AVR-GCC" wäre jetzt ne gute Möglichkeit
um das Problem schneller zu lösen - an Bascom habe ich jedoch noch nie
gedacht! Möchtest Du effektiv und schnell programmieren, dann nutze
AVR-GCC.
Musst Du noch effektiver und viel schnellere Programme programmieren
dann bleib bei Assembler! Ausserdem lernst Du so noch mehr über den
jeweiligen Controller.

von Axel R. (Gast)


Lesenswert?

Ich mische mal mit, guten Abend.

Ich verwende FastAVR in der Version 3.16.
Fast wie BASCOM, aber man kann auch "komplizierte" Rechnungen in
einem Rutsch erledigen. Hat einige Bugs: nuja, aber man kann sich den
erstellten ASM-Quelltext ansehen und zur Not Hand anlegen.Das geht bei
Bascom meines Wissens nach nicht. Der erzeugte QuellCode ist
erstaunlich kompakt. Wenn noch andere mal einen Blick draufwerfen
müssen (weil man vielleicht gerade mal einen Tag nicht da ist, sehen
die Kollegen eher durch, als bei Assembler. Basic kann noch fast
jeder.
Normalerweise macht man das aber mit C ;-)
Dann grinst dann auch keiner von den bessserverdienenden Ingenieuren.
Für zu Hause ist das Basic aber voll o.k. egal, ob Bascom oder
FastAVR.
Wenn der Käfer voll ist, nimmt man eben einen größeren auwei

Gruß
AxelR.

von Marko (Gast)


Lesenswert?

Ich wurstel schon ne Weile mit Bascom rum,

das schöne dabei, Du kannst auch Assembler Befehle einbauen,
die dann 1:1 in den Code übernommen werden.
Beispiel: Du willst ne komplexe Menüführung für den LCD
mix x Eingabemöglichkeiten bauen, In Bascom coden 2 Stunden,
in Assembler 2 Wochen.
Du Hast komplizierte Rechenoperationen,
die du schnell abarbeiten möchtest, brauchst sehr kurze
Reaktionszeiten, Bascom 100.000 Zyklen
Assembler 10.000. Mit Bascom kannste aber beides in eines
vereinen.

Basic-Bla bla bla ... Assembler teil ... BAsic-Bla bla

Für mich als Gelegenheitsprogger und
ehemals C64 Jünger ist Bascom Ideal, weil Projekte schnell
erledigt sind (und Basic kann ich auch noch aus der Jugend)
Für Bascom gibts auch n recht gutes Forum.
Der Größte Haken von Bascom:

X = a * b / z  ... geht nicht!

X = a * b
X = X / z  ... das geht

Wenn man sich aber mal dran gewöhnt hat ists auch kein Problem.

Für Professionellere Programmierung
ist das AVR-GCC, welches auch schön kompakte flotte Anwendungen
kompiliert vermutlich das Maß der Dinge.

von pebisoft (Gast)


Lesenswert?

hallo, ich progge mit dem neuen fastavr-basic 4.13.
es ist fast genauso schnell wie winavr-c.
auch in fastavrbasic kann man den asm-code einbauen:
$Device= m16
$Stack = 32
$Clock = 8
$Baud  = 19200

Dim wert As Byte
Dim wert_1 As Byte

Declare Sub test()
Declare Sub test_1()

wert_1=123

test()
Print wert
test_1()
Print wert
WaitMs 250

End

$Asm
.def pebi_1=r24
$EndAsm

Sub test()
$Asm
  ldi  pebi_1,77
  STS wert, pebi_1
$EndAsm
End Sub

Sub test_1()
$Asm
  lds  pebi_1,wert_1
  STS wert, pebi_1
$EndAsm
End Sub

ich mache dieses als hobby und habe zeit. mich interessiert das
innenleben des avr in asm. ich möchte sehr hardwarenahe proggen.
winavr-c war für mich zu schwer. ich habe schwierigkeiten mit der
syntax davon. bascom ist was für progger die schnell das ergebnis sehen
wollen und der code dabei uninteressant ist. schnelle timingprogramme,
wo es teilweise auf us ankommt, kann man mit bascom nicht schreiben.
auch das innenleben vom erstellten programm ist schon manchmal
merkwürdig und ich kann den sourcecode nicht ändern.
darum habe ich mich für fastavr-basic entschieden. wenn das programm
fertig ist, schaue ich mir in aller ruhe den asm-sourcrcode an und
manchmal ändere ich sogar etwas. auch habe ich jetzt schon fast alle
asm-sourcen für ir-diode, sharpsensoren, uart, compasmodul i2c,
i2ceeprom usw kennengelernt. ist für mein hobby erste sahne. möchte ich
nicht wieder missen. ich bewundere den erbauer von diesem fastavr-basic.
eine sehr gute arbeit. ich kann den originalen asm-sourcr-code in avr
studio einladen und testen und dann sogar in avrstudio noch einmal
compilieren, falls mir da timingfehler oder anderes auffällt.
habe jetzt eine rc5-senderoutine erstellt unabhängig vom benutzten pin
am avr (bei bascom gibt es die, bindet aber da auch gleich 2 timer).
habe sogar mal eine uart-sofware nachgestellt mit asm in einer sub als
test. konnte die sogar unter asm in winavr-c laufen lassen.
bei fastavr gibt es keine begrenzung in : a=b+c*d.
habe aber festgestellt, wenn ich schreibe:
a=a+b
a=a+c
a=a*d
das der asm-sourcecode(schreibweise bascom) hier weniger ist,
effektiver und schneller. ist schon interessant. so etwas erkennt man
aber nur, wenn man den sourcecode anschauen kann.

mfg pebisoft

von Florian (Gast)


Lesenswert?

Hi @ all.

Vielen Dank für die zahlreichen Antworten.

"C" ist mir wirklich zu hoch.

Habe mir jetzt mal den Fastavr runtergeladen.... Bin grad beim
probieren. Das mit dem ASM-Code beim fastavr finde ich super, dan man
dann eigenlich nachvollziehen kann, was er macht.

@pepisoft

Kannst du mir bitte mal für einen Atmega 8 ein Blinklicht proggen,
damit ich ungefähr den Ablauf des Programmes verstehe. Wäre echt
super.

Vielen Dank Florian

von pebisoft (Gast)


Lesenswert?

das basicprogramm, eine leuchtdiode an portb.0 mit 255 ms:

$Device= m16
$Stack = 32
$Clock = 8


DDRB=&b00000001

Do
  WaitMs 255
  PORTB.0=1
  WaitMs 255
  PORTB.0=0
Loop

End
---------------------------------------------------------------
der source-code mit basicline-code:
;FastAVR Basic Compiler, ver.4.1.3, by MicroDesign
;Created 22:56:17, 04-11-2005
;
.include  "D:\FASTAVR\inc\m16def.inc"
;
    .DSEG

    .CSEG
.ORG  0

_Reset:
    ldi    yl,Low(RAMEND)
    out    SPL,yl
    ldi    yh,high(RAMEND)
    out    SPL+1,yh
    sbiw  yl,32

;******  USERS BASIC CODE **********************

;-Line--0006----DDRB=&b00000001--
    ldi    zl,Low(1)
    out    DDRB,zl

;-Line--0008----Do--
L0000:

;-Line--0009----WaitMs 255--
    ldi    zl,Low(255)
    call  _Wms

;-Line--0010----PORTB.0=1--
    sbi    PORTB,0

;-Line--0011----WaitMs 255--
    ldi    zl,Low(255)
    call  _Wms

;-Line--0012----PORTB.0=0--
    cbi    PORTB,0

;-Line--0013----Loop--
    rjmp  L0000
L0001:

;-Line--0015----End--
L0002:
    jmp  L0002


;****** End OF USER BASIC CODE ****************


;////// _Waitms ///////////////////////////
_Wms:  ldi    r20,0x14
_Wms1:  ldi    r21,0x85
_Wms2:  dec    r21
    brne  _Wms2
    dec    r20
    brne  _Wms1
    dec    zl
    brne  _Wms
    ret

;System Global Variables: 0  bytes
;User   Global Variables: 0  bytes

mfg pebisoft

von pebisoft (Gast)


Lesenswert?

zum compilieren mit avrasm32 brauchst du nur die m16def in m8def
ändern.
mfg pebisoft

von dirk (Gast)


Lesenswert?

In Bascom AVR kann man auch ASM proggen

von Florian (Gast)


Lesenswert?

Dann ist "C" eigentlich die Königssprache....Und wenn man die
Beherscht, sind keine Grenzen mehr gesetzt?

Hab jetzt auch mal Win-AVR runtergeladen...

Trotz AVR-GCC-Tutorial schaff ich keinen Einstieg.... Es happert ja
schon beim makefile...Für was braucht man das?

Dann gibts 4 Programme:

AVR Insight
MFile
Programmers Notepad
TkInfo

Ich find über diese Programme nix im AVR-GCC-Tutorial geschrieben. Also
wie ich Anfange, Einstellungssachen beim Notepad, wie ich
kompiliere...usw

Brauch ich da überhaupt alle=?

Gruß Florian


ach ja
@pepisoft
danke für das prog

von Rahul D. (rahul)


Lesenswert?

Makfile: Jörg Wunsch hat dazu das Programm "Mfile" geschrieben. DAmit
erstellt man ziemlich simpel makefiles. Es gehört zum Lieferumfang von
winAVR dazu.

Wenn man das Paket (unter Windows) installiert, bekommt man auch ne
Menge Icons auf den Desktop... mindestens zwei davon sind Hilfen.

Sonst hilft auch ein Blick ins gcc-Forum; zu finden im Frame auf der
linken Seite...

von pebisoft (Gast)


Lesenswert?

hallo florian.
es ist nicht einfach mit winavr-c. habe auch lange gebraucht um meine
sensoren am robby zu proggen. das lcd-display und das senden/empfangen
von daten über uart-rs232 hat sehr sehr lange gedauert.
dann kamen die schwierigkeiten mit der syntax von c --$|&---. wenn man
z.b. beim port diese zeichen nicht richtig setzen tut oder übersieht,
gibt es keine falschmeldung sondern die pins schalten einfach nicht
richtig und das ergebnis ist falsch und dann sucht man und sucht man.
darum habe dann mal mit fastavr-basic angefangen.
mfg pebisoft

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.