Hallo zusammen, bin völliger Anfänger was die Atmel Programmierung angeht und habe heute mal versucht folgendes Projekt von Elm Chan ans Laufen zu bekommen: http://elm-chan.org/works/mxb/report.html Hat auch alles wunderbar geklappt. Wollte einfach mal davon berichten, falls ein anderer Anfänger das gleiche vor hat. Was man braucht: * konstante 5V Betriebsspannung (z.B. über einen 7805 Spannungsregler) * Steckbrett * ATTiny45, am besten in IC Sockel * ISP Programmieradapter * Kondensator * Alten Lautsprecher oder kleinen Summer Den Schaltplan gibt es auf der Seite: http://elm-chan.org/works/mxb/mg.png Die Widerstände die dort eingezeichnet sind habe ich einfach weggelassen, da ich die passenden (33 Ohm) nicht hatte. Hat auch ohne funktioniert und ist nichts kaputt gegangen :-) Anstatt des 10µF Kondensator habe ich einen 100nF Keramik Kondensator genommen (da ich die anderen nicht hatte). Den Source Code gibt es auch auf der Seite: http://elm-chan.org/works/mxb/mg.zip Habe die Dateien leider weder mit "avra" noch mit "avr-as" kompiliert bekommen, daher habe ich einfach die mitgelieferte .hex Datei direkt auf den Atmel übertragen. Mein Programmieradapter kann avr109 und avr910. Ersteres ist soweit ich weiss normalerweise schneller, hat aber nicht funktioniert. Letzteres hat funktioniert, z.B. so: avrdude -p t45 -b 115200 -u -F -c avr910 -P /dev/ttyUSB0 -U flash:w:mg.hex -vvv Danach ist man schon fast fertig, allerdings läuft der Atmel jetzt noch zu langsam, da er im Auslieferungszustand einen Prescaler für die Systemclock gesetzt hat. Ausserdem muss man "High Frequency PLL Clock" aktivieren. Dazu muss man die Fuse bits im Low Fuse Byte anpassen, z.B. geht das mit avrdude so: * avrdude -p t45 -b 115200 -u -F -c avr910 -P /dev/ttyUSB0 -t * "write lfuse 0 0xe1" * (Strg+D) Danach kann man direkt die Lautsprecher anschliessen und sollte die Melodie hören, die wirklich toll klingt für so ein kleines Teil! Hoffe das hilft irgendwem :-) Oder vielleicht hat ja jemand ein paar Anmerkungen (z.B. wozu die Widerstände sind? Lautstärkenbegrenzung? Ob man vielleicht doch lieber 10µF nehmen sollte oder obs egal ist? Ob man dem Lautsprecher noch einen Kondensator geben könnte, um den Klang noch besser zu machen, o.ä.? Was BOD=2.7V im Schaltplan bedeutet?) Viele Grüße Flo
Na dann: Glückwunsch zum gelungenen Aufbau. Die Widerstände sollen eine Überlastung des Controllers verhindern, wenn die Impedanz des Lautsprechers zu klein wäre. Der Kondensator soll verhindern, daß die Betriebsspannung bei Laständerungen einbricht. BOD bedeutet: Brown Out Detection, was soviel heißt wie Überwachung, ob die Betriebsspannung des Controllers "absackt". Dafür gibt es auch eine "Fuse". MfG Paul
Hallo! Ich brauche dringend Hilfe von jemandem, der es schon mal zum Laufen gebracht hat: Progammieren tue ich zwar schon seit ziemlich lange, mit Perl hatte ich aber noch nie was am Hut gehabt. Doch leider ist ja das Skript, das die txt-Datei in .asm konvertiert, in Perl geschrieben. So, hab mir also ActivePerl runtergeladen und installiert. Das im Download mitgelieferte "example.pl" konnte ich einwandfrei ausführen, doch die "mel2asm.pl" partout nicht! Das Ganze unter WinXP. Gebe ich in cmd ein "perl _:\...\mel2asm.pl", so scheint er in eine Endlosschleife zu gehen. Denn die Eingabeaufforderung wird nicht angezeigt, sondern cmd "hängt" da so (also "C:\...\..>" wird nicht ausgegeben). (Falls nicht klar was gemeint ist, poste ich auch noch mal n Sreenshot.) Mache ich "#perl" am Anfang des Skriptes weg, dann kommt Fehlermeldung [syntax errir at mel2asm.pl line 1, near "txt >"] Warum? Ich hoffe wirklich, ihr könnt mir helfen, da es für ein Geschenk für meine beste Freundin zum bDay ist und mir es sehr am Herzen liegt! Danke im Voraus! MfG J!M!
das Programm funktioniert schon allerdings ist das kommandozeilen verhalten nicht so wie man es erwaeten würde. das programm ließt daten von der Standardeingabe und gibt die umgewandelten auf der standardausgabe aus. Kommandozeilenparameter werden ignoriert. am begin des scriptes steht ein beispiel, wie das ding aufgerufen werden sollte und zwar: perl mel2asm.pl < mel.txt > melody.asm das heißt die datei mel.txt wird auf die standardeingabe umgeleitet. Für das programm sieht es aus, als tippt jemand den inhalt der datei direkt ein. und die Ausgabe des Programms wird in melody.asm umgeleitet. wenn du das > melody.asm weglässt wird alles in der kommandozeile ausgegeben
Vieeelen vieelen Dank!
Da ich keine Ahnung von Perl habe, dachte ich dass "mel2asm.pl < mel.txt
> melody.asm" bereits ein Skriptbefehl ist, also das Skript selbst diese
Einlese und Ausgabe macht, aber anscheinend war es nur ein Kommentar.
Nochmal Danke! däumchen
Hallo, ich hatte das gleiche Problem mit mel2asm.pl und habe es in javascript (mit FSO) nachgebaut (win-XP) einfach drag & drop im explorer und melody.txt wird in melody.asm umgewandelt (evtl. etwas umständlich umgesetzt).
1 | // Name : melody2asm.js |
2 | // Just drop file to this script |
3 | |
4 | |
5 | // get file(s) from argument-list |
6 | objArgs = WScript.Arguments; |
7 | |
8 | if (objArgs.length > 0) |
9 | { |
10 | // get path of script |
11 | SkriptPfad = WScript.ScriptFullName; |
12 | SkriptPfad = SkriptPfad.substr(0,SkriptPfad.length - WScript.ScriptName.length); |
13 | |
14 | var filename_data,filename_out; |
15 | for (var arg_index=0; arg_index < objArgs.length; arg_index++) |
16 | { filename_data=objArgs.item(arg_index); |
17 | if (filename_data.substr(filename_data.length-3,3) == "txt") |
18 | { filename_out=filename_data.substr(0,filename_data.length-3)+"asm"; |
19 | |
20 | data_asm=""; |
21 | file_load(filename_data); |
22 | write_file(filename_out,data_asm); |
23 | |
24 | } |
25 | else |
26 | { WScript.echo("Concerning data-file must be a text file (*.txt) : "+filename_data); } |
27 | } |
28 | |
29 | function file_load(newfile) |
30 | { var isdata=true; |
31 | { var file = new ActiveXObject("Scripting.FileSystemObject"); |
32 | if (file.FileExists(newfile)==true) |
33 | { var datafile=file.OpenTextFile(newfile,1,false,0); |
34 | var full_data = datafile.ReadAll(); |
35 | var data_line = full_data.split("\r"); |
36 | var temp; |
37 | var count=0,i,k,time,cntall=0; |
38 | var data_array; |
39 | for (i=0; i < data_line.length;i++) |
40 | { isdata=true; |
41 | if (data_line[i].length < 5) { isdata=false;} |
42 | if (data_line[i].indexOf(";") >= 0){ isdata=false;} |
43 | data_line[i]=data_line[i].slice(1); |
44 | |
45 | if (isdata) |
46 | { data_array = data_line[i].split(" "); |
47 | for (k=0;k < data_array.length;k++) |
48 | { temp=data_array[k]; |
49 | if (k==0) |
50 | { time=parseInt(temp);int1=time&255;putbyte(time&255);putbyte(time>>8);} |
51 | else |
52 | { if (k==(data_array.length-1)) {temp=temp+"|en";} |
53 | putbyte(temp); |
54 | } |
55 | } |
56 | |
57 | } // if isdata |
58 | } |
59 | data_asm+="\r\n\; "+cntall; |
60 | datafile.Close(); |
61 | |
62 | function putbyte(dat) |
63 | { if (count>=16) {count=0;} |
64 | if (count==0 ) |
65 | {data_asm+="\r\n\t.db "+dat;} |
66 | else |
67 | {data_asm+=", "+dat;} |
68 | count++; |
69 | cntall++; |
70 | } |
71 | |
72 | } // if file exist |
73 | else |
74 | { alert("File doesn't exist");} |
75 | } |
76 | } |
77 | |
78 | |
79 | function write_file(filename,data) |
80 | {fso=new ActiveXObject("Scripting.FileSystemObject"); |
81 | file=fso.OpenTextFile(filename,2,true); |
82 | file.write(data); |
83 | file.close(); |
84 | } |
85 | |
86 | } |
87 | else |
88 | { WScript.echo("Concerning file must be dropped to this script"); |
89 | } |
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.