PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ich möchte AVR´s in Basic programmieren



05.01.2004, 12:28
Hallo Leute
Ich suche einen Basic-Compiler für AVR´s. Gibt es sowas? Vielleicht sogar umsonst als Freeware oder so?

05.01.2004, 12:54
Da soll BASCOM gut sein - kostet aber was. Aber vielleicht gibt es ein Demo mit dem man was anfangen kann? Link hab ich leider keinen

Kjion
05.01.2004, 13:51
Es gibt eine Demo die bis 2 kb Code funktioniert, aber ansonsten keine Einschränkungen hat. Das sollte zum Anfangen eigentlich erstmal reichen...

http://www.mcselec.com/ ist eigentlich die Adresse, scheint aber im Moment nicht zu gehen... findet sich bestimmt aber auch noch irgendwo anderes im Netz

Und beim Elektronikladen kann man auch die Vollversion für 78 € kaufen...
http://www.elektronikladen.de/bascomavr.html

eine andere Möglichkeit wäre FastAVR, allerdings hab ich keine Ahnung ob das was taugt

MfG Kjion

davil
05.01.2004, 15:23
Dann werde ich mal mein Glück mit Bascom probieren. Danke

LuK-AS
05.01.2004, 21:42
Hallo Davil,

nimm den Basic Compiler BasCom, mit dem Compiler kannst du 98% aller Funktionen der AVR´s programmieren.

ABER !!! Tu Die selber einen Gefallen und benutze NICHT den BasCom internen Flasher um den Code in den AVR zu brennen. Benutze dafür ausschließlich PonyProg2000 dann ist auch gewährleistet, dass I2C, LCD und andere Applikationen auch funktionieren.

Ich hoffe das hilft Dir ein bisschen weiter...

Lieben Gruß LuK-AS

davil
06.01.2004, 00:05
Muss man bei dem Demo alle 4 Dateien laden?
Was steckt denn hinter den 2 % die Bascom nicht unterstützt?
Kann man da auch Assemblerprogramme einbinden?
Danke schon mal für eure Tips

Kjion
06.01.2004, 01:02
Alle vier Dateien...
...keine Ahnung was Bascom nicht unterstüzt, für den Anfang reichts auf alle Fälle und wenn nicht kann man ja immer noch auf WinAVR umsteigen ;)
...ich bin mir relativ sicher, dass man auch Assemblerprogramme einbinden kann....

MfG Kjion

LuK-AS
06.01.2004, 05:21
Klar kann man ASM in den Quelltext einfügen und damit auch die restlichen 2% abdecken. Hauptsächlich geht es bei den 2% um direkte Speicherzugriffe, die aber eher selten vorkommen. Ansonsten funktioniert alles.

Gruß LuK-AS

Frank
06.01.2004, 21:11
Ich hab das BASCOM-Teil auch mal geladen. Garnicht so übel. Bin eigentlich gleich klar gekommen - so "Hello World" mäßig zumindest ;-)

Hab mal hab mal das blinkende LED-Beispiel vom GCC-Compiler in BasCom Basic übersetzt:





Dim I As Byte

Config Portb = Output

Portb = 0
I = 0
Do
Portb = I
Incr I
Waitms 300
Loop

End


Gruß Frank

Frank
09.01.2004, 19:17
Hallo
der BasCom Compiler bzw. die BasCom Entwicklungsumgebung ist ja in der Tat sehr gut. Bin sehr positiv überrascht. Der Sprachumfang lehnt sich stark an Visual Basic an und ist optimal auf den Controller zugeschnitten. Es wurde fast an alles gedacht. Sogar LCD-, Matrix-Tastatur-, I2C-Port uvm. werden berücksichtigt.Und Assemblerprogramme lassen sich fließend integrieren. Alles in allem eine wirklich empfehlenswerte Sache für C-Control Umsteiger.

Warum sollte man nicht den internen Flasher benutzen? Was gibt es denn da für Probleme?

Gruß Frank

jobee
01.02.2004, 03:14
Hallo,

noch ein Link mit Bascom AVR Beispielen und den Demodateien
findet man hier http://www.home.fh-karlsruhe.de/~saka0012/.

Gruß
Jörg

God
01.02.2004, 13:22
@ Frank,
ich weiss auch nich was an dem internen Flasher anders sein soll, ich benutze ihn auch und funktioniert auch alles. Nur mit PonyProg funktionierts gerade nicht! :)

mfg God

08.02.2004, 13:20
Thomas
bei mir gab es Probleme mit den STK500 und den internen Programmer

es hat einfach nicht funktioniert- ich benutze dafür AVR-Studio

Gruß Thomas

19.02.2004, 04:17
Do
Portb = I
Incr I
Waitms 300
Loop


Irgendwie habe ich Probleme mit dem "Wait" Befehl.
Wenn ich z.B. "Wait 1" benutze und ds Programm in Bascom im Simulator laufen lasse, bleibt die Simulation beim Wait komplett stehen.

Bekommt man der Simulation irgendwie beigebracht das Wait warten und nicht Ende heisst?

Wenn ich das Programm in meinen ATMega16 hochlade, wartet der bei "Wait 1" eher 10 Sekunden als eine.

Liegt das vielleicht daran, dass der Controller noch nichts von dem externen Oszilator weiss und der Bascom-Compiler auch keine Ahnung mit welcher Geschwindigkeit mein Controller getaktet wird.

Wenn ja, wie bekomme ich das in den Griff?

Und wenn nein, woran liegt es dann? ;-)

Kjion
19.02.2004, 07:22
Liegt das vielleicht daran, dass der Controller noch nichts von dem externen Oszilator weiss und der Bascom-Compiler auch keine Ahnung mit welcher Geschwindigkeit mein Controller getaktet wird.

Daran wirds vermutlich liegen. Du müsstest die Fusebytes des ATmega16 richtig programmieren, oder einfach davon ausgehen, das er mit 1 Mhz läuft.
per $crystal = 1000000 kannst du dem Compiler sagen mit welcher Taktfrequenz der µC läuft.
Hier findet sich auch noch was zu den Fusebytes:
http://www.elektronik-projekt.de/include.php?path=content/articles.php&contentid=29


Irgendwie habe ich Probleme mit dem "Wait" Befehl.
Wenn ich z.B. "Wait 1" benutze und ds Programm in Bascom im Simulator laufen lasse, bleibt die Simulation beim Wait komplett stehen.

Ich vermute, dass der Simulator gar nicht stehen bleibt, sondern das nur sehr lange dauert bis er damit fertig ist.
Bei 1 Mhz Taktfrequenz muss er als erstmal 1 000 000 Befehle des AVRs simulieren. Und das dauert halt...
Deshalb sollte man immer die Warteschleifen bei Simulieren rausnehmen, oder viel besser gar keine benutzten und das ganze über Timerinterrups laufen lassen.

MfG Kjion

Frank
19.02.2004, 07:27
Hast Du auch mal "Waitms 300" verwendet? Da ist Angabe ja in Millisekunden. Ich hatte da eigentlich keine Probleme obwohl ich "$crystal = 1000000" auch nicht angegeben hatte

Gruß Frank

recycle
19.02.2004, 17:08
Daran wirds vermutlich liegen. Du müsstest die Fusebytes des ATmega16 richtig programmieren,

Damit bin ich dann beim nächsten Problem.
Ich habe mir diesen Programmer gekauft: http://shop.mikrocontroller.net/csc_article_details.php?nPos=0&saArticle[ID]=32&VID=iwXxOw4uWAlNaJgJ&saSearch[word]=&saSearch[category]=AVR&saSearch[special]=

Laut dem AVR Tutorium kannm man damit "yaap" benutzen um die Programme in den ATMega zu laden.
Damit das mit dem ATMega16 klappt musste ich mir aber eine neue yaap.ini herunterladen. Seitdem ich diese ini habe, klappt die Kommunikation zwischen yaap und dem ATMega16. Allerdings werden jetzt in yaap die Dialoge für die Fusebits nicht mehr angezeigt.

Weisst du ob und wie ich mit dem obigen ISP auch andere Programme zur Übertragung und vor allem zum setzen der Fusebits benutzen kann? Bascom wäre mir am liebsten, aber zur Not tuts auch jedes andere Programm.


Bei 1 Mhz Taktfrequenz muss er als erstmal 1 000 000 Befehle des AVRs simulieren.

Na klasse, ich habs ja immer gesagt, nur Lug und Trug in der Computerwelt ;-)
Wenn das so ist, ist der Wait-Befehl ja mal wieder nur ein Fake und nichts anderes als eine billige Warteschleife.
Auf einem MC sehe ich das ja noch ein, aber der Simulator läuft auf nem PC, da könnte er sich ja schon einen echten Timer schnappen.

Ich habe auf einem 1400 MHz Rechner reichlich lange gewartet und nix ist passiert. Auf dem ATMega16 ging es bei "Wait 1" wenigstens nach ca 10 Sekunden weiter.
Aber vielleicht braucht das blöde Windows ja wieder 1 Millionen Takte um einen Takt vom MC zu simulieren.


Deshalb sollte man immer die Warteschleifen bei Simulieren rausnehmen,

Habe ich probiert, aber dann kann ich mir die Simulation auch sparen. So schnell wie der dann durch die Schleife rasselt, kann ich auch nicht lesen ;-)


und das ganze über Timerinterrups laufen lassen.

Ich sehe habe zwar Oberarme wie Einstein, aber vom IQ her bin ich eher Arnold :-(
Ich habe gestern das erste mal eine LED an einen MC geklemmt, das erste mal den BASCOM Compiler benutzt und das erste mal irgendwas in einen MC geladen.
Bis ich mich an Timerinterupts wage dauerts noch ein paar Monde.

Aber Dank deiner Hilfe weiss ich jetzt, dass mein Problem wohl eher an der Simulator-Software liegt und es nicht nicht's bringt weiter auf meinen PC einzutreten. ;-)

recycle
19.02.2004, 17:26
Hast Du auch mal "Waitms 300" verwendet? Da ist Angabe ja in Millisekunden. Ich hatte da eigentlich keine Probleme obwohl ich "$crystal = 1000000" auch nicht angegeben hatte

hmm, nö. Ich habe den Befehl zwar gesehen, dachte mir aber wenn der nichtmals ne Sekunde stoppen kann, kommt der mit millisekunden erst recht nicht klar.
War wohl dumm gedacht, werde es heute abend mal mit "Waitms" versuchen.

Aber noch eine andere Frage. Ich habe vier billige Taster an die Eingänge geschaltet um da ein bischen mit rumzuspielen.
Die scheinen meinen MC aber auch nicht besonders zu beieindrucken.
Irgendwo im Netz habe ich gelesen, dass man Taster bei Verwendung mit MCs immer entprellen muss.
Bei einer sinnvollen Anwendung leuchtet mir das ja ein.
Aber ich wollte einfach nur in einer Schleife den Eingang abfragen und wenn der 1 ist soll eine LED an einem anderen Port aufleuchten.

Wenn ich da den Taster lang genug gedrückt halte, müsste das doch auch ohne irgendwelche Algorithmen zum Entprellen klappen, oder bin ich da mal wieder auf dem Holzweg?

Irgendwie suche ich noch nach ein paar wirklich simplen Beispielprogrammen für BASCOM ein paar LEDs und ein paar Taster.

Alle Beispiele die ich bisher gefunden habe beschäftigen sich mit Motoren, LCDs, Beepern oder geben irgendwas über den UART auf ein Terminalprogramm aus.
Das habe ich an meiner simplen Grundschaltung aber leider alles nicht dran, weil ich eigentlich nicht vorhatte mit LCDs anzufangen, solange ich nichtmals ne simple LED so ans leuchten bekomme.

Mit der Ausgabe über die serielle auf ein Terminal wird es vermutlich auch nichts geben, solange ich die Fusebits für den externen Oscilator nicht gesetzt kriege.

Kjion
19.02.2004, 17:53
Weisst du ob und wie ich mit dem obigen ISP auch andere Programme zur Übertragung und vor allem zum setzen der Fusebits benutzen kann? Bascom wäre mir am liebsten, aber zur Not tuts auch jedes andere Programm.

Probiers doch mal mit PonyProg. ( www.lancos.com ). Ich hab noch nicht mit Yaap gearbeitet, deshalb kann ich nix dazu sagen...


Wenn das so ist, ist der Wait-Befehl ja mal wieder nur ein Fake und nichts anderes als eine billige Warteschleife.
Auf einem MC sehe ich das ja noch ein, aber der Simulator läuft auf nem PC, da könnte er sich ja schon einen echten Timer schnappen.

Warum ein Fake ?? Genau das soll der wait Befehl doch machen...

Auf dem PC geht es ja darum das was der µC macht zu simulieren. Und das heißt nunmal, dass der PC erst jeden einzelnen Befehl interpretieren muss. ;) Und das dauert nunmal...


Habe ich probiert, aber dann kann ich mir die Simulation auch sparen. So schnell wie der dann durch die Schleife rasselt, kann ich auch nicht lesen

Gibts da nicht so was wie einen Einzelschrittmodus, das also immer nur ein Befehl ausgeführt wird ??


Irgendwo im Netz habe ich gelesen, dass man Taster bei Verwendung mit MCs immer entprellen muss.

eingentlich schon, es sollte aber auch auf jeden Fall ohne gehen. Du könntest einfach mal hier posten wie du die Schalter angeschloßen hast ...

Soweit erstmal
MfG Kjion

recycle
19.02.2004, 20:00
Probiers doch mal mit PonyProg. ( www.lancos.com ). Ich hab noch nicht mit Yaap gearbeitet, deshalb kann ich nix dazu sagen...

Habe ich schon, habe ich aber auch nicht hinbekommen.
Wenn ich da jetzt nichts verwechsle, war das Problem, dass bei Ponyprog zwar steht, dass der ATMega16 unterstützt wird, ich ihn in den Einstellungen aber nicht gefunden habe.
Zusätzlich kommt noch, dass ich nicht weiss, wie ich Ponyprog für meinen ISP einstellen muss.
Deswegen weiss ich nicht obs an den falschen Einstellungen für den MC oder für den ISP oder an beidem liegt.

Weisst du denn, ob Ponyprog den ATMega16 tatsächlich unterstützt und wie ich das einstelle? Wenn ich "nur" noch rausfinden muss, wie ich meinen ISP konfiguriere vereinfacht das die Sache.




Warum ein Fake ?? Genau das soll der wait Befehl doch machen...
Auf dem PC geht es ja darum das was der µC macht zu simulieren. Und das heißt nunmal, dass der PC erst jeden einzelnen Befehl interpretieren muss. Und das dauert nunmal...


Genau das Programm soll das was der µC macht simulieren nicht nachmachen ;-)
Wenn ich im MC "Wait 1" eingebe soll der Simulator das machen, was der MC auch macht, nämlich ca. 1 Sekunde warten und nicht 10 Minuten.
Nach meinem Geschmack soll sich eine Simulation möglichst ähnlich verhalten aber nicht unbedingt dasselbe machen wie das original.
das wesentliche beim Wait-Befehl ist doch die Wartezeit und nicht die Anzahl der Leerschleifen.

Bei einem Flugsimulator reicht es mir ja auch, wenn der mir den Absturz simuliert, dass ich wirklich abstürze und in Flammen aufgehe wie das Original verlange ich von einem Simulator nicht unbedingt.

Ist aber wohl Geschmacksache ;-)



Gibts da nicht so was wie einen Einzelschrittmodus, das also immer nur ein Befehl ausgeführt wird ??


hm jaaa gibt es ;-)
Ich habe aber wie gesagt gestern das allererste mal mit Bascom der Simulation und mit nem MC rumgespielt.
Deswegen gings mir nicht daruum einen Workaround dafür zu finden, dass der Wait-Befehl in der Simulation nichts taugt, sondern ich dachte das funktioniert nicht, weil ich irgendwas falsch gemacht habe.

Habe ich wahrscheinlich auch, den der Befehl ""$crystal = 1000000" fehlt in meinem Programm z.B. völlig.


eingentlich schon, es sollte aber auch auf jeden Fall ohne gehen. Du könntest einfach mal hier posten wie du die Schalter angeschloßen hast ...

So wie es im AVR-Tutorium auf www.mikrocontroller.net beschrieben ist.

Ich vermute aber eher, dass ich einfach irgendwas im Programmcode falsch gemacht habe. Sind wie gesagt noch meine ersten Gehversuche.
Ich muss mir das alles mal etwas genauer ansehen.

20.02.2004, 02:20
Ich habs jetzt.

Als ich Ponyprog installiert habe, habe ich die aktuellste nicht-beta Version genommen (Version 1.17).
Weil ich so schon keinen Plan von der ganze Sache habe, wollt ich mich nicht auch noch mit irgendwelchen Beta-Problemen rumschlagen.

Nachdem mir jemand auf Microcontroller.net gesagt hat, dass es bei ihm mit Ponyprog 2000 funktioniert habe ich diese Version installiert und dann hats mit meinem ISP und dem setzen der Fusebits für den ATMega16 auch auf Anhieb geklappt.

Nachdem die Fusebits gesetzt sind wartet der µC bei "Wait 1" auch ca. eine Sekunde und legt nicht mehr gleich eine Kaffeepause ein.

Noch schöner ist, dass ich jetzt auch weiss, dass mein ISP irgendwie ST200 compatibel ist. Jetzt habe ich das Ding nämlich auch in der Bascom IDE ans laufen bekommen, kann von da aus flashen und brauche nicht immer zwischen verschiedenen Programmen hin- und her zu springen.

Danke für eure Tips, so langsam glaube ich schon fast dran, dass ich irgenwann auch noch meine Taster ans rennen kriege ;-)

Kjion
20.02.2004, 13:03
Schön, dass es jetzt geht...
Ich benutzte im Moment teilweise die allerneuste Beta Version ( da avrdude den ATmega162 nicht unterstützt ). Funktioniert wunderbar, also keine Angst vor Beta Versionen ;)


Ich vermute aber eher, dass ich einfach irgendwas im Programmcode falsch gemacht habe.

Das poste doch mal den Code hier...

MfG Kjion

20.02.2004, 17:22
Funktioniert wunderbar, also keine Angst vor Beta Versionen

Das sagts du so leichtfertig ;-) Ich habe beruflich mit Software zu tun und weiss, was manche Programmierer unter Beta verstehen ;-)

Viele Programmierer verstehen unter Beta ein fertiges, stabiles Release, mit allen Funktionen, das sie eigentlich nur noch ne Weile testen möchten.
Es gibt aber auch welche, die veröffentlichen ihr Zeugs schon als Beta, bevor sie es selber überhaupt ein einziges mal ausprobiert haben.

Normalerweise habe ich aber überhaupt kein Problem mir Betaversionen zu installieren, wenns nicht funktioniert fliegt es halt wieder runter.

Da ich aber gerade erst mit µCs anfange, wusste ich nicht
- ob meine Platine richtig funktioniert,
- ob meine parallele Schnittstelle im Bios richtig konfiguriert ist
- ob mein ISP richtig funktioniert,
- als was ich meinen ISP in den diversen Programmen einstellen muss
- was ich so alles µC spezifisch in den diversen Programmen einstellen muss, z.B. Chip-Typ, Frequenz usw
- ob meine Schaltung richtig ist
- ob die Software und die Version überhaupt geeignet ist,

Das sind dann so schon zuviele mögliche Fehlerquellen um systematisch vorzugehen, da wollte ich nicht mit einer Betaversion noch eine zusätzliche Fehlermöglichkeit schaffen.

Die Rechnung ist natürlich mal wieder nicht aufgegangen der einzig wirkliche Fehler war, dass ich eben nicht die Betaversion benutzt habe ;-)

Aber letztendlich bin ich in ein paar Stunden soweit gekommen, dass ich immerhin schon ein paar LEDs gezielt ans leuchten kriege.
Wenn man bedenkt, dass ich mir bis vor ein paar Wochen unter einem µC nur ein schwarzes Stück "Plastik" mit Beinchen dran vorstellen konnte, bin ich damit eigentlich ziemlich zufrieden.



Das poste doch mal den Code hier...

Das war bisher nur ein ganz simpler Versuch, so ungefähr

if PortD.0 1 then
PortB.0 1
end if
oder so ähnlich.
Ich hoffe ich habe am Wochenende Zeit mir das mal richtig anzusehen und ein paar Zeilen mehr auszuprobieren.
Wenn ich's mir mal richtig angesehen habe und meine Taster dann immer noch nicht ans laufen bekomme, komme ich garantiert auf das Angebot den Code mal hier zu posten zurück.