Hallo Leute,
nun ich hab folgendes Problem und hoffe ihr könnt mir weiterhelfen, da
ich noch ein Einsteiger bin. Nun ich habe eine Schaltung mit dem
ATMega16 aufgebaut
(http://www.roboternetz.de/wissen/images/3/3c/Avrtutorial_grundschaltung_mittaster.gif)
und mir ein ISP AVR programmierkabel bei ebay gekauft (selbstgebautes
funktionierte nicht ;( ) naja, jetzt hab ich mittlerweile Zugriff auf
den AVR aber mein Programm funkioniert nicht! ich will einfach nur eine
LED einschalten!
$regfile = "M16def.dat"
$framesize = 16
$swstack = 16
$hwstack = 16
$crystal = 1000000
Config Portc.0 = Output 'Ein Pin wird aus Ausgang konfiguriert PC0
(also Pin0 von Port C)
Portc.0 = 1 'Pin wird auf High, also 5V geschaltet
End
Die Led ist an PC0 und natürlich GND angeschlossen.
In Basecom hab ich die Optionen alle eingestellt (STK 200/300) usw halt,
wiegesagt kann ihn lesen usw. Aber ich muss ihn jedesmal im programmer
neu auswählen und kann ihn auch nicht identifizieren :( hab echt alles
probiert ich hoffe ich könnt mir kurz helfen, wäre echt nett.
Mfg
Lenox
Dein Problem ist also nicht dein Code, sondern der AVR selbst (im
Zusammenhang mit Bascom und den Programmer).
Was für ein Teil benutzt du denn? Hast du den Link zu Ebay oder andere
brauchbare Daten?
>$crystal = 1000000
Wie kommst du auf diesen Wert?
Hast du die Fusebits auf eine externe Taktquelle umgestellt?
Wieviel mA zeiht die LED? Hast du da noch einen Widerstand zwischen?
Schau mal unter Options-Programmer, ob was bei Dir als Ardesse für den
Parallelport für den STK200/300 steht.
Bei den meisten PCs geht 378. Wenn Du ein Notbook verwendest, dann hast
Du gute Chancen mit 3BC.
Unter Options-Compiler-Chip musst Du Deinen uC heraussuchen.
>$regfile = "M16def.dat"
Schön, dass das drin steht, muss aber nicht, wenn Dein Chip in
Options-Compiler-Chip drin steht.
>$framesize = 16>$swstack = 16>$hwstack = 16
...verändert die Standardwerte, die unter Options-Compiler-Chip drin
stehen.
Nimm die Standardwerte, d.h. lass diese 3 Zeilen einfach weg.
>$crystal = 1000000
...ist hier völlig egal, kannst weglassen.
Ist nur dann wichtig, wenn der UART verwendet werden soll.
Im Auslieferungszustand sind übrigens alle AVRs mit internem R-C Takt
eingestellt.
Kurzum, der gesamte Overhead ist nichts nütze.
Der Overhead ist nur dann wichtig, wenn die Standardwerte
(Options-Compiler-Chip) nicht genommen werden sollen.
Das was im Quelltext steht wird compiliert, ist da nichts, dann werden
die Werte gemäß Options-Compiler-Chip etc. hergenommen.
>Unter Options-Compiler-Chip musst Du Deinen uC heraussuchen.
wird mit
>$regfile = "M16def.dat"
automatisch überschrieben. Egal was man da eingestellt hat. Genauso mit
Stack, Crystal, Baud, ...
Die Direktiven stehen über den Compilersettings.
Hallo Leute,
danke erstmal für eure Hilfe!!
hab auch direkt probiert, also nur
Config Portc.0 = Output 'Ein Pin
wird aus Ausgang konfiguriert PC0 (also Pin0 von Port C)
Portc.0 = 1 'Pin wird
auf High, also 5V geschaltet
End
Aber dann bekomm ich 2 Erorrs
1. Varibale can not be uset with SET (DDRC)
2. Invailed datatype beim portc
Hab ich vielleicht mal ein Beispielcode um die LED an PC0 anzuschalten?
1 K Wiederstand ist vorgeschaltet. Der Programmieradapter von ich ebay
ist folgender
http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&ih=004&item=140037594733&rd=1&sspagename=STRK%3AMEWN%3AIT&rd=1
MFG
Lenox
Hallo Bobbelsche,
da ich kein Einsteig hab komm ich erst garnicht zum lernen!
kannst du mir nicht einfach mal ein code für den Meta16 schreiben der
die LED an PC0 einschaltet? Dürften ja nur ein paar Zeilen sein.. Achja
ich verwende noch den internen takt, hab aber ein 16 MHz Quarz noch
hier liegen, aber dazu muss ich ja die Fusebits umstellen deshalb hab
ich es vorerst noch gelassen. Ist das normal das ich den Chip nicht
"identifizieren" kann? bekomm dann imemr nen Fehler.
Mfg
Lenox
Ist der Parallelport denn richtig eingestellt? (Siehe Frage von Marc
Meise)
Welches Betriebssystem verwendest du?
Was ist jetzt eigentlich dein Problem? Der Programmcode oder das die
Hardware nicht erkannt wird?
Hast du evtl einen Druckertreiber installiert, der auch versucht den LPT
zu nutzen?
Wenn du XP hast, hast du einen LowLevel Porttreiber installiert?
Wie kommst du auf Crystal=10000000?
Hast du die Lock- und Fusebits verändert? Wenn ja, welche auf was?
...
Solange du den Chip nicht identifizieren kannst, ist der Programmcode
unwichtig. Und das es nicht geht ist logischerweise nicht normal!
Wenn du die Fusebits nicht umgestllt hast muss es $Crystal=8000000
heissen.
Aber das ist bei deinem Programm nicht ausschlaggebend.
Wie wäre es mal hiermit: http://www.rowalt.de/mc/index.htm
Dann kannst du das Programm auch selbst schreiben.
Hast du die Spannung VCC am AVR mal gemessen?
unter "options-compiler-chip" m16def.dat einstellen....
dann diese Zeilen hier compilieren, und auf den Mega16 übertragen.
Die LED an Port B1 blinkt jede Sekunde.
$crystal = 1000000
Config Portb.1 = Output
Portb.1 = 0
Do
Portb.1 = 1
Waitms 100
Portb.1 = 0
Waitms 100
Loop
Gruß.
So habs nochmal probiert (mit deinem Proggry),
hab die Einstellungen auch übernommen.
Complimiert.
Run Programmer.
Dann kommt ein Fehler "
Could not identify chip with ID:000000" dann
"Select chip and target chip do not match AT90S2313 <> Atmega16"
ich benutze Win XP mit SP2, was für ein LowLevel Porttreiber? Spannung
am AVR liegt an (Spannungsregler mit Kondensatoren vorgeschaltet, extakt
5 V.
Mfg
Lenox
>Die LED an Port B1 blinkt jede Sekunde.
Sorry, tut sie nicht.
Weil Crystal nicht stimmt und 100mS 0,1Sekunde ist und keine ganze ;)
>unter "options-compiler-chip" m16def.dat einstellen....
Dann muss man aber auch so kensequent sein und da die Taktfrequenz und
alles andere auch einzustellen.
Man sollte sich angewöhnen, alles was geht im Programmcode einzustellen.
Das Problem ist folgendes:
Heute schreibt man ein Programm für einen M16. Compiliert es, probiert
es aus und alles ist gut.
Morgen steckt man einen M32 auf's Board, ändert noch eine Kleinigkeit
und compiliert neu. Aber das compilierte ist immer noch für einen M16
und nicht für den M32! Man hat es einfach übersehen.
Bascom wird zwar meckern und fragen was man denn für ein Volli.... ist.
Aber spätestens wenn das Programm mal veröffentlich wird, damit andere
es auch nutzen können oder andere Fehler suchen sollen, geht das große
Raten los. Was für einen AVR benutz er?
Schlimmer ist es aber noch mit der Taktfrequenz und den Stacks.
Ein wintzig kleines Programm hat kein Platz für Variablen, weil der
Stack für ein anderes Programm noch viel zu hoch eingestellt war. Da
meckert Bascom nicht!
Ein waitms 100 dauert auf einmal 120mS. Für ein blinken nicht schlimm,
aber die Zeiten können auch mal wichtige Funktionen übernehmen. Wenn der
AVR mit 16MHz läuft aber man hat ihn für ein anderes Projekt in den
Settings noch auf 8MHz stehen, geht alles auf einmal doppelt so schnell.
Mal ganz davon abgesehen, das das Timing für RS232 absolut nicht mehr
passt!
Jeder kann natürlich so verfahren, wie er möchte. Das will ich niemanden
vorschreiben.
Aber einen Anfänger zu raten was in den ettings einzustellen ohne das er
weiss, was das bewirkt und wie da überhaupt die Zusammenhänge sind finde
ich verantwortungslos.
Hallo Marco,
hatte meinen Fehler mit den 100ms erkannt und dies auch gepostet.
....wahrscheinlich eine Überschneidung.
Lenox will sich möglicherweise erst in die AVR einarbeiten. Und da ist
es doch schön, wenn man schon mal ein kleines Erfolgserlebnis hat.
Ich will nicht meckern, aber waitms 1000 erzeugt einen kleineren Code
(weniger Speicherbedarf) als Wait 1.
Lenox, was für ein Board verwendest du für den M16?
Ein gekauftes oder selbstgebautes?
Gehen VCC und GND auch zum Programmieradapter?
Sicher, das alles richtig verdrahtet ist?
so habs probiert, musste wieder den Atmega16 in dem Pulldown menü
auswählen, den Chip löschen ging (laut anzeige) aber flash schreiben
wiederrum nicht "Write buffer to Flash ROM" der macht einfach nichts,
wenn ich dann abbreche ließt er schnell und zeigt "Difference at 0000"
an. "Red flash ROM into buffer " geht aber bekomm nur Nullen. Bin echt
ratlos... :( Was für ein Treiber meintest du? geht aber auf meinem
Laptop (WIN 89) auch nicht. PonyProg gibt mir "Communication Port not
available (-16) als Fehler.
kla grade nicht installiert aber ist kein Problem, icq skype msn alles
Hauptsachte ich bekomm das mal hin, ist echt sehr Ärgerlich ;) wollte
jetzt auch mal Schluss machen für Heute. kannst mir ja dein Skype
Nickname o.ä. mal zukoommen lassen wäre sehr nett.
Bis bald
Lenox
@Lenox
Mal angenommen, dass Dein Programmer i.O. ist, solltest Du folgendes
überprufen:
1) BASCOM braucht den Parallelport im ECP-Mode, in der
Windows-Systemsteuerung-System-Hardware-Gerätemanager-Anschlüsse
kontrollieren, ob LPT als ECP eingestellt ist und was die LPT-Adresse
ist.
2) wenn EPP oder was anderes angezeigt wird: Ins BIOS gehen und den
Parallelport auf ECP einstellen, dann klappt es auch mit dem ISP (bei
mir geht es z.B. nur auf ECP)
Sonst (nach 2 Minuten Googeln):
http://www.roboternetz.de/wissen/index.php/RN-Board_FAQ-Seite#Wie_muss_Bascom_eingestellt_werden.2C_damit_der_ISP-Programmierdongle_richtig_funktioniert.3F
danke erstmal, der LPT Anschluss ist erkannt und die Adresse stimmt
auch. Kann allerdings als "Ressourcenmöglichkeiten" folgendes eistellen:
1. Interrup möglichst nie verwenden
2. Interrup nie verwenden (eingestellt)
3. Jeden dem Anschluss zugewiesenen Inerrup verwenden
und dann kann ich noch eine "Legacyererkennung für plug & Play
aktivieren"
So ich guck jetzt aber nohmal im BIOS nach!
Mfg
Lenox
So hab jetzt von Normal auf ECP eingestellt.
Dann gibt es noch folgende Einstellmöglichkeiten:
ECP DMA:
1. DMA0
2. DMA1
3. DMA2
4. DAM3 (eingestellt)
und parallel Port IRQ:
1. IRQ5
2. IRQ7 (eingestellt)
kann ihn noch immer nicht identifizieren, auch nicht mit Ponyprog
Ansonsten mal im Geraetemanager schauen, was bei dir an der rot
markierten Stelle steht. Dieser Wert muss in den Bascom Einstellungen
bei "LPT-address" rein. So wie auf dem Bild sollte es bei den meisten
aussehen, aber bei dir koennte u.U. irgendein exotischer Wert dastehen.
Beste Gruesse
Adresse usw stimmt, aber hab grad etwas erschreckendes herausgefunden,
die Steckerbelegung der programmieradapters ist genau umgekehrt!!!!
Stand extra dabei aber hab mic hgrad gewundert warum an einem Pin Kein
GND war, es war AVV, hab daraufhin alle überprüft, der Stecker wurde
wohl genau falschrum angebracht, klasse jetzt war natürlich alles falsch
angeschlossen ;( habs direkt umgebaut, aber geht noch imemr nicht, ist
jetzt vllt schon der Chip kaputt? war wirklich alles vertauscht, GND Mit
VCC MOSI RST SCK MISO alles andersrum, oh man ey wie kann man sowas nur
verkaufen 8die lötstellen sehen aus wie schelcht per hand gelötet, das
gibt ne tolle Bewertung, bin echt n bisschen sauer :(.
>oh man ey wie kann man sowas nur>verkaufen 8die lötstellen sehen aus wie schelcht per hand gelötet,
Was erwartest du???
Schau dir mal den Preis an. Schau dir mal den Preis für den Bausatz an.
Schau dir mal die Werbung auf der Ebay-Seite an.
Überleg selbst mal, was das Material kostet, wieviel Lohn man haben will
und bedenke den logistischen Aufwand.
Außerdem habe ich gestern schon gefragt, ob alles richtig angeschlossen
ist!
Ja aber den Wannenstecker falsch auf das Flachbandkabel printen ist
schon n blöder Fehler, naja jetzt steht ich da.. alles könnte kaputt
sein nur ich weiß nicht was. Ja ich hatte die Schaltung überprüft aber
nicht den Programmieradapter, ich ging davon aus das sowas überprüft
wird. Oh man