Forum: Mikrocontroller und Digitale Elektronik Bascom / ATMega16 Problem Einsteiger


von Lenox (Gast)


Lesenswert?

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

von Marco (Gast)


Lesenswert?

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?

von Marc M. (bytewood) Benutzerseite


Lesenswert?

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.

von Marco (Gast)


Lesenswert?

>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.

von Lenox (Gast)


Lesenswert?

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

von Bobbelsche (Gast)


Lesenswert?

Hallo Lennox,

mit Bascom kannst Du doch ganz einfach dein erstelltes Programm 
simulieren......

gruß

von Lenox (Gast)


Lesenswert?

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

von Marco (Gast)


Lesenswert?

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?
...

von Marco (Gast)


Lesenswert?

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?

von Bobbelsche (Gast)


Lesenswert?

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ß.

von Lenox (Gast)


Lesenswert?

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

von Bobbelsche (Gast)


Lesenswert?

Wenn die von Dir beschriebene Bascom-Meldung kommt, ist entweder kein 
oder
ein defekter Programmer angeschlossen.

von Bobbelsche (Gast)


Angehängte Dateien:

Lesenswert?

@ Lenox

hab das Programm auf Port B0 umgeschrieben, und statt 100ms nun die
Blinkfrequenz auf 1 sek. korrigiert.
Bascom-File im Anhang.

von Marco (Gast)


Lesenswert?

>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.

von Bobbelsche (Gast)


Lesenswert?

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.

von Marco (Gast)


Lesenswert?

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?

von Lenox (Gast)


Lesenswert?

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.

von Bobbelsche (Gast)


Lesenswert?

Welchen Programmieradapter nutzt du?

von Bobbelsche (Gast)


Lesenswert?

Übrigens brauchst Du keinen Porttreiber.....

von Bobbelsche (Gast)


Lesenswert?

...unter "OPTIONS-Programmer" den passenden Programmer auswählen !

von Lenox (Gast)


Lesenswert?


von Bobbelsche (Gast)


Lesenswert?

hast du denn einen solchen Programmer ?
Ansonsten mit den Einstellungen experimentieren.

von Lenox (Gast)


Lesenswert?

Ja kla den hab ich ja hier! ich weiß nicht was ich einstellen soll, hab 
folgendes gemacht
http://www.roboternetz.de/wissen/index.php/Bascom_-_Erstes_Programm_in_den_AVR_Controller_%C3%BCbertragen
und jetzt halt noch unter "options-compiler-chip" m16def.dat 
eingestellen.

von Bobbelsche (Gast)


Lesenswert?

hast Du evtl. Skype ? Dann könnte man sich unterhalten. Mache jetzt 
Feierabend. Ab Mittwoch guck ich wieder hier rein.

Bis bald.

von Lenox (Gast)


Lesenswert?

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

von Marc M. (bytewood) Benutzerseite


Lesenswert?

@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

von André K. (andre-)


Lesenswert?

"Config Portb.1 = Output"

muss

config PINB.1 = output heissen

Beste Gruesse

von Lenox (Gast)


Lesenswert?

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

von Lenox (Gast)


Lesenswert?

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

von André K. (andre-)


Angehängte Dateien:

Lesenswert?

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

von Lenox (Gast)


Lesenswert?

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 :(.

von Marco (Gast)


Lesenswert?

>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!

von Lenox (Gast)


Lesenswert?

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

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.