Forum: Mikrocontroller und Digitale Elektronik Anfängersprachen AVR


von Ehrhardt B. (ehbal)


Lesenswert?

Guten Morgen,

ein mir nahestehender Bekannter bat mich um einen Rat bezüglich einer 
Programmiersprache die für ihn als Anfänger tauglich ist. Nun bin ich 
nicht unbedingt der Experte (ich programmiere ausschließlich in asm) was 
verfügbare Sprachen außerhalb von C betrifft (was er nicht möchte). 
Bekannt sind mir bascom, mbasic, mikroBasic, pascal und dieses neue 
luna. Ich möchte ihm helfen und suche nun eine Empfehlung.

Aus meiner sicht fällt mbasic und mikroBasic aus dem Raster da z.T. 
kostenpflichtig. Bascom ist..nunja, ich habe da eine persönliche 
Abneigung. Bleibt noch pascal und luna. Gibt es andere Alternativen die 
ich übersehen habe?

Ehrhardt

von Mario (Gast)


Lesenswert?

Processing - siehe Arduino-Plattform. Für Einsteiger extrem zu empfehlen 
glaube ich. Processing ist meinens Wissens an C angelehnt, aber viel 
einfacher.
Siehe http://de.wikipedia.org/wiki/Processing
und http://de.wikipedia.org/wiki/Arduino-Plattform

Gruß
Mario

von Andreas D. (rackandboneman)


Lesenswert?

Es wird doch schon an völlig grafischen Programmiersystemen zB für die 
arduino-Plattform gearbeitet - modkit, minibloq usw usw...

von Ehrhardt B. (ehbal)


Lesenswert?

Hallo Mario,

danke für den Tip. Arduino hatte ich jedoch schon in Betracht gezogen 
das hätte ich natürlich schreiben müssen. Problematisch ist dabei, er 
möchte gerne irgendwelche kleineren Steuerung für seine Modelle bauen 
und das auch mit eigenen Schaltungen (was er fachlich kann). Auf dem PC 
programmiert er auch mit Delphi oder Real Studio oder sowas in der Art 
und in dieser Richtung wäre sein Wunsch am größten (C ist ihm zu 
komplex). Die vereinfachte Ausführung von C in Arduino finde ich 
ebenfalls empfehlenswert.

Ich versuche ja immernoch ihn zu überzeugen assembler zu nehmen, so 
schwer ist das ja nun auch nicht.

Ich bin da insgesamt etwas überfragt und will ihm einfach helfen (er ist 
da etwas speziell), sonst hätte ich diesbezüglich kein Thread dafür 
gestartet.

Gibt es Erfahrungen zu mikroPascal oder luna was ja jeweils dem delphi 
oder dem real studio recht ähnlich scheint?

Ehrhardt

von Mario (Gast)


Lesenswert?

Ui dein Kumpel ist ja schon etwas speziell, das grenzt ja an 
Lernverweigerung...
Er wird sich schon entscheiden müssen was er will. Er wird wohl oder 
übel etwas Neues lernen müssen. Ich würde doch die einfachste und am 
schnellsten zum Ziel führende Variante nehmen, und da bietet sich doch 
Arduino an - für den Einstieg. An die Platform ist doch schnell was 
drangestrickt und auf steigen auch "richtiges" C kann man immer noch. 
Meiner Meinung nach kommt kommt man da kaum an C vorbei.

Wenn er schon in einer Hochsprache (Delphi/Pascal) programmiert hat wird 
doch auch der Umstieg nicht so schwer fallen (ich bin auch schonmal von 
Pascal auf C umgestiegen). Die Syntax ist halt ein bischen anders, aber 
sonst...

Oder er nimmt halt das AVRStudio mit C. Er kann sich ja auch irgendein 
XMEGA-Modul holen und dann das ASF (Atmel Software Framework) nutzen, 
dann muß man sich nicht mal mehr um Register scheren...

von Yalu X. (yalu) (Moderator)


Lesenswert?

Gerade als Anfänger würde ich das nehmen, was auch die breite Masse
nimmt, da hier der Support (Tutorials, Hilfe bei Problemen, Zuverlässig-
keit der Entwicklungstools) am besten ist. Beim AVR sind die Mainstream-
Sprachen aber nun einmal nicht luna oder mikroPascal, sondern C, Bascom
und Assembler.

Luna scheint sich auch noch ziemlich tief im Entwicklungsstadium zu
befinden, im Moment funktioniert nicht einmal der Download (ok, bei
Interesse müsste man sich eben an den Autor wenden).

Dann ist halt noch die Frage, was der Spaß kosten darf. Bei mikroPascal
und Bascom sind nur die Demoversionen kostenlos.

von ich (Gast)


Lesenswert?

Bascom,

aber lerne die Hardwarefunktionen !!!!

von Karl (Gast)


Lesenswert?

Ehrhardt Balstein schrieb:
> Bascom ist..nunja, ich habe da eine persönliche
> Abneigung.

Nun, das ist schade. Ist doch eigentlich recht gut, sowohl für 
Einsteiger als auch für Fortgeschrittene. Daneben gibt es einige 
deutschsprachige Foren, die sich damit beschäftigen und Hilfe anbieten 
können und viele viele Programmbeispiele im Netz. Und man kann sogar 
prima Assemblercode einfügen.

von Herr M. (herrmueller)


Lesenswert?

>ich schrieb:

> aber lerne die Hardwarefunktionen !!!!

Das ist grundsätzlich das A+O bei jeder Programmiersprache für den µC.
Die meisten Probleme enstehen bei den Timern, I/O, Interrupt usw. Ein 
bisschen rechnen, Schleifen, Vergleiche und Bits setzen kann jede 
Sprache.
Also zuerst das 'Handbuch' des Controllers 'runterladen und anschauen. 
(Ich finde den Ausdruck Datenblatt ziemlich untertrieben, das klingt 
immer so nach technischen Daten und weniger nach Anleitung)

Ich habe mich mal kurz mit Bascom beschäftigt und finde es eigentlich 
ziemlich gut - alle Schleifen, Unterprogramme, Funktionen, es kennt alle 
Registernamen und Bitnamen, die man einzeln setzen kann. Man kann 
supereinfach Assemblerbefehle reinschreiben und nach ein bisschen Lesen 
und nach ein paar Minuten konnte ich eine Assemblerfunktion einbinden, 
die einen Wert aus Bascom übernimmt und einen Wert zurückgibt. Ein 
Simulator mit allen Registerwerten und I/O ist auch vorhanden.
Das Problem mit Bascom ist meiner Meinung nach, dass es Anfängern mit 
Hilfe  vieler 'Hardware'-Befehlen vortäuscht, sie könnten einfach was 
programmieren, ohne die Hardwarefunktionen zu kennen. Was nützt der 
tollste 'Config Timer' Befehl, wenn man nicht weiss, ob der Timer 8 oder 
16 Bit hat, was die einzelnen Funktionen bewirken, oder ob es den 
gewählten Timer bei diesem µC überhaupt gibt. So entstehen jede Menge 
Anfängerprobleme, die dann nerven und schliessendlich auf Bascom 
zurückgeführt werden.

Die Sprache ist relativ egal, für einen Grossteil des Programmes muss 
man den µC kennen.
Ein hinkendes Beispiel: Wenn ich einem Engläder erklären will, wie er 
einen Ikea Schrank aufbauen soll, nützen mir die besten 
Englischkenntnisse nichts, wenn ich nicht selbst weiss, wie es geht.

herrmueller (der nur Assembler kann und nch ein paar Minuten auch ein 
bisschen BASCOM)

von Hannes L. (hannes)


Lesenswert?

Ehrhardt Balstein schrieb:
> irgendwelche kleineren Steuerung für seine Modelle bauen

Also hauptsächlich Bitschupserei, die aber recht genaues Timing 
erfordert und somit den Umgang mit Timern und Interrupts voraussetzt.

Ehrhardt Balstein schrieb:
> Ich versuche ja immernoch ihn zu überzeugen assembler zu nehmen, so
> schwer ist das ja nun auch nicht.

Das wäre der einfachste Weg. ASM ist nunmal eineindeutig. Da macht der 
Controller exakt das, was man programmiert hat, (fast) ohne jedes 
Missverständnis.

...

von Ehrhardt B. (ehbal)


Lesenswert?

Ja, der gute Mann ist da recht speziell, was solls, was tut man nicht 
alles für Freunde.

arduino habe ich ihm nun vorgeschlagen. Ich denke auch das ist für 
seinen Einstieg und zum Verständnis die beste Lösung. bascom sagt ihm 
nicht zu. mikroPascal als kommerzielles Produkt und nur als Demo fand er 
uninteressant. luna interessierte ihn wegen der Ähnlichkeit zum Real 
Studio (es war nicht delphi was er nutzt) und der Objektorientierung.

Mal sehen für was er sich nun entscheidet, ob arduino oder luna. Der
Download funktioniert, da gabs keine Probleme:
http://avr.myluna.de/doku.php?id=de:download
Aus meiner Sicht ist da Potential und syntaktisch/konzeptionell besser 
als bascom, auch wenn ich kein Freund von Basic-Dialekten bin.

Jedoch habe ich ihm davon abgeraten. Das mag zwar interessant sein, aber 
wenn sich noch etwas in der Entwicklungsphase befindet und keine 
Tutorials existieren ist das aus meiner Sicht nur was für Experten. Wenn 
er das so interessant findet kann er ja immernoch später darauf wechseln 
wenn er Erfahrungen mit dem arduino gesammelt hat (wenn ihm denn die 
Ähnlichkeit zum real Studio so wichtig ist).

Ich werde ihm also die Empfehlung zu arduino aussprechen.

Ehrhardt

von Salewski, Stefan (Gast)


Lesenswert?

Autor: Yalu X. (yalu) (Moderator)
Datum: 21.01.2012 21:14

>Gerade als Anfänger würde ich das nehmen, was auch die breite Masse
>nimmt,

Ja, und Blödzeitung lesen und Jungle-Camp gucken.

Wenn Du geschrieben hättest:
"Wenn man sich das Leben möglichst einfach machen will, ein eher 
schlichtes Gemüt hat und keine Herausforderungen sucht...", dann hätte 
ich vielleicht nichts gesagt.

Wobei, dann kann man auch wieder Jungle-Camp gucken, denn ums Geld 
verdienen ging es hier ja wohl eh nicht.

Und zum Thema: Für mich für uC (AVR) eindeutig C, weil Standard, 
avr-gcc, gute Tutorials, und Buchegger. Und nebenbei etwas Assembler, 
damit man weiß was der uC so tut. Ja, nicht sehr originell, aber ich 
wüsste keine ernsthafte Alternative.

Für PC gibt es natürlich mehr Abwechslung, etwa Ruby, Vala. Aber auch 
nicht "was auch die breite Masse nimmt".

von Yalu X. (yalu) (Moderator)


Lesenswert?

Salewski, Stefan schrieb:
>>Gerade als Anfänger würde ich das nehmen, was auch die breite Masse
>>nimmt,
>
> Ja, und Blödzeitung lesen und Jungle-Camp gucken.

:D

Wer weiß, wenn ich Lese- und Fernsehguckanfänger wäre, würde ich das
vielleicht sogar tun (kann's leider nicht nachprüfen) ;-)

Aber die Begründung, warum Mainstream in diesem Fall Vorteile hat,
habe ich ja dazu geschrieben.

> Und zum Thema: Für mich für uC (AVR) eindeutig C, weil Standard,

Zitat aus Wikipedia:

  "Ein Standard ist eine vergleichsweise einheitliche oder
  vereinheitlichte, weithin anerkannte und meist auch angewandte (oder
  zumindest angestrebte) Art und Weise, etwas herzustellen oder
  durchzuführen, die sich gegenüber anderen Arten und Weisen
  durchgesetzt hat."

... also etwas so zu machen, wie es die breite Masse macht,

womit sich der Kreis wieder schließt :)

von Oliver (Gast)


Lesenswert?

Amforth sollte noch erwähnt werden. Forth ist ziemlich speziell, das 
muss aber kein Nachteil sein. Infos gibt es unter amforth.sf.net

von Yalu X. (yalu) (Moderator)


Lesenswert?

Ehrhardt Balstein schrieb:
> Der Download funktioniert, da gabs keine Probleme:
> http://avr.myluna.de/doku.php?id=de:download

Bei mir funktioniert er inzwischen auch. Wenn mich mein fotografisches
Gedächtnis nicht täuscht, war da vorher noch eine Versionsnummer mit
0.7. Vielleicht bin ich ja zufälligerweise genau in den Update-Prozess
geplatzt :)

Auf den ersten Blick macht das Ding gar keinen schlechten Eindruck.

von Ehrhardt B. (ehbal)


Lesenswert?

moin yalu

Yalu X. schrieb:
> Bei mir funktioniert er inzwischen auch. Wenn mich mein fotografisches
> Gedächtnis nicht täuscht, war da vorher noch eine Versionsnummer mit
> 0.7. Vielleicht bin ich ja zufälligerweise genau in den Update-Prozess
> geplatzt :)

unten steht:
de/download.txt · Zuletzt geändert: 21.01.2012 17:05:16 (Externe 
Bearbeitung)

vermutlich wars noch im cache?

> Auf den ersten Blick macht das Ding gar keinen schlechten Eindruck.

jetzt war ich auch neugierig. was mich natürlich interessiert ist dabei 
die assembler-listing-ausgabe des compilers.

das helloworld:
1
avr.device = attiny2313
2
avr.clock = 8000000         ' Quarzfrequenz
3
avr.stack = 4               ' Bytes Programmstack (Vorgabe: 16)
4
5
uart.baud = 19200            ' Baudrate
6
uart.Recv.enable             ' Senden aktivieren
7
uart.Send.enable             ' Empfangen aktivieren
8
9
print "Hallo Welt"
10
11
Do
12
Loop

in der ausgabe des *.s files:
1
;lavra compatible assembler source
2
;created by lavrc version 0.8.35 beta
3
4
.importClass  attiny2313
5
.importObject  Macro_Misc
6
.importObject  Macro_Delay
7
8
9
.CSEG
10
flash:
11
; ISR VECTORS
12
.org  0x0000
13
rjmp  _LUNA_MAIN
14
.org  intVectorSize
15
16
_LUNA_MAIN:
17
cli
18
ldi    _RA0,LOW(sramEnd)
19
out    SPL,_RA0
20
rcall  _SRAM_CLEAR
21
ldi    ZL,low(_fnSP)
22
ldi    ZH,high(_fnSP)
23
ldi    _RA0,LOW(fnStack)
24
ldi    _RA1,HIGH(fnStack)
25
st    Z+,_RA0
26
st    Z,_RA1
27
;Line 4{ uart . baud =19200 } -----------------------------------------------
28
ldi    _RA0,HIGH(25)
29
out    UBRRHI,_RA0
30
ldi    _RA0,LOW(25)
31
out    UBRRL,_RA0
32
;Line 5{ uart . recv . enable } ---------------------------------------------
33
sbi    UCR,4
34
;Line 6{ uart . send . enable } ---------------------------------------------
35
sbi    UCR,3
36
;Line 8{ print _str0 } ------------------------------------------------------
37
ldi    _RA0,low(cVar_str0*2)
38
ldi    _RA1,high(cVar_str0*2)
39
rcall  _PRINT_STRING_DATA
40
rcall  _PRINT_CRLF
41
;Line 10{ do } --------------------------------------------------------------
42
_do0:
43
;Line 11{ loop } ------------------------------------------------------------
44
rjmp  _do0
45
_do0next:
46
47
.importUsedObjects
48
;Line DATA{  } --------------------------------------------------------------
49
_data:
50
cVar_str0:
51
.db    0x0A,"Hallo Welt",&h00
52
.eseg
53
_eeprom:

sind 162 bytes binary..ist ok. Wies es mit richtigen Programmen aussieht 
steht natürlich auf einem anderen Blatt. Lobenswert ist die Unterteilung 
der einzelnen Befehle und der dafür erzeugte asm-code.

Es fehlt der "lavra"-Assembler stand-alone, das würde mich mehr reizen. 
Eine Dokumentation der aus der Datenbank importierten Objekte konnte ich 
aber nirgends finden.

Ehrhardt

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.