Archiv verlassen und diese Seite im Standarddesign anzeigen : Ich möchte AVR´s in Basic programmieren
Hallo Leute
Ich suche einen Basic-Compiler für AVR´s. Gibt es sowas? Vielleicht sogar umsonst als Freeware oder so?
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
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
Dann werde ich mal mein Glück mit Bascom probieren. Danke
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
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
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
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
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
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
Hallo,
noch ein Link mit Bascom AVR Beispielen und den Demodateien
findet man hier http://www.home.fh-karlsruhe.de/~saka0012/.
Gruß
Jörg
@ 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
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
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? ;-)
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
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
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. ;-)
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.
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
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.
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 ;-)
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
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.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.