Forum: Mikrocontroller und Digitale Elektronik Atmega16


von Nik Bamert (Gast)


Lesenswert?

Hi!


Ich hab heute meinen Atmega16(dil 40) bekommen.
Mein erster Test, wie immer: Eine Led blinken lassen.
Das mit Bascom. Doch warum funktioniert folgendes Beispiel nicht?

Anfang:
Porta.1 = 1
'waitms 10
Porta.1 = 0
Goto Anfang


Der Compiler liefert zwei Mal : Invalid Datatype Doch wie muss ich ein
Bit angeben. Ein Byte ist mit einem % gekennzeichnet, hexadezimal mit &
aber wie sieht das bei einem Bit aus.

Und noch was. muss ich beim Atmega16 beide Gnd's(pin 11,pin31)
anschliessen, oder gehört der eine zum A/D wandler? Im Datenblatt finde
ich dazu nichts und auch im Block Diagramm ist nur ein Gnd
eingezeichnet...

Bitte helft mir :)

Nik

von Dieter (Gast)


Lesenswert?

Hallo Nik


Füge oben im Code mal ein lustiges

Config Pina.1 = Output

ein und probiere dann nochmal.

PIN 30 Spannung für den AD Wandler, wird aber glaube ich auch benötigt,
wenn du den Port digital verwenden willst. Mußt du aber mal
nachlesen. Ich schliesse die immer direkt mit an.

PIN 31 ist die Masse für den AD Wandler

PIN 11 Masse allgemein


MFG

Dieter

von Bernd Schmidt (Gast)


Lesenswert?

@Nik

und mit
'waitms 10

"blinkt" die LED munter mit 50 Hz.

versuch mal  'waitms 500


Bernd

von Nik Bamert (Gast)


Lesenswert?

hi!
ich hab nun ziemlich alles versucht, unteranderem auc das;geht aber
auch nicht.
Trotzdem Danke, denn der Compiler Fehler ist nun weg.

Anfang:
Config Pinb.1 = Output
Set Portb.1
Waitms 1000
Reset Portb.1
Waitms 1000
Goto Anfang

jedenfalls im Simulator nicht. Und den ISP werde ich frühstens morgen
aufbauen können :-(

Nik

von Ludwig Meafe (Gast)


Lesenswert?

Ich kenne Bascom nicht - siehtr aber eigentlich richtig aus.

Ich denke schon dass es im Simulator funktioniert, aber eine Sekunde
warten kann da ne ganze Weie dauern ...

Probiers mal aus, wenn du den ISP aufgebaut hast (oder verkürze doch
einfach mal die zeiten auf 5ms oder so für den Simulator).

von Dieter (Gast)


Lesenswert?

Hallo

Also der Code geht bei mir in Bascom ohne Probleme

Config Pina.1 = Output
Anfang:
Porta.1 = 1
Waitms 10
Porta.1 = 0
Waitms 10
Goto Anfang

Immer mit F8 den nächsten Schritt ausführen. Wenn du das Programm in
den uC überträgst, ändere die waitms in 500 oder so, sonst geht das zu
schnell.

MFG
Dieter

von Nik Bamert (Gast)


Lesenswert?

schade, es klappt immernoch nicht..es liegt jedoch nicht daran das der
Simulator überhaupt nicht funktioniert, denn eingaben mit z.b.
if portb.1 = 1 then ....
funktionieren..Auch das Lcd Display funktioniert tadellos.
Ich bin jetzt wieder am isp bauen *fast fertig*:) .
Aber kann es sein das ein Prog. im Simulator nicht funktioniert, in
Echt aber schon? Vielleicht liegts auch an der Version ich habe :

BASCOM-AVR IDE Version : 1.11.7.3
Compiler: Version 1.11.7.3

Oder muss man noch irgendw etwas aktivieren?

Mfg Nik

von Nik Bamert (Gast)


Lesenswert?

danke nochmal an alle!!
nun funktionierts aber etwa mit 3 sekunden on/off  obwohl ich es auf
500ms eingestellt habe. Ich hab dann jedoch gemerkt das ich noch keinen
Quarz angehängt habe :)
komisch-geht trotzdem :)

MFG Nik

von Oliver (Gast)


Lesenswert?

Hi,

standartmäßig ist beim Atmel der interne Oszillator eingeschaltet.
-> Funktioniert trotzdem & langsamer.

Gruß Oliver

von Nik Bamert (Gast)


Lesenswert?

aha, danke, wie kann ich den denn abschalten?
denn wenn ich ein programm erstelle indem ein 10mhz quarz angegeben
ist,ich verwende natürlich auch so einen, dann läuft alles um den
faktor 10 langsamer. Ich muss dann alle wait werte mal zehn rechnen, um
herauszufinden, wie lange die pause wirklich dauert...wahrscheinlich
macht der dann auch alle anderen Befehle langsamer....


Nik

von Oliver (Gast)


Lesenswert?

@ Nik

ich kenne Bascom nicht. In C würde man in einem Header-File die
Frequenz definieren, um dann in einer Delay-Funktion (oder Waitms)
diese Definition zur Berechnung der Wartezeit heranzuziehen. Der
Vorteil ist, dass man bei Quarzwechsel nur noch das Define ändern muss
und dann verhält sich die Delay-Funktion dementsprechend.

Ich hoffe, dass hat dir weitergeholfen.

Oliver

von Oliver (Gast)


Lesenswert?

oh es muss natürlich heißen ",das hat dir weitergeholfen" :-)

von Nik Bamert (Gast)


Lesenswert?

Hi!

Danke für eure Tipps, das mit der 10 fach langsameren Geschwindigkeit
lässt sich liess sich noch nicht ändern, aber ich bin nun zum "hello
world" Test fürs lcd weitergegangen. Funktioniert auch ganz toll. Doch
ich wollte nun mal n' Taster abfragen. Pullups hab ich eingebaut,
Spannung nachgemessen, an den richtigen pins angeschlossen, im
simulator klappts...hat jemand noch ne idee?

$regfile "m16def.dat"
'Config Portb.3 = Input
'Config Portb.2 = Input

Cls
Initlcd
Home
Lcd "Taster abfragen"
Anfang:
If Portb.2 = 1 Then Goto Taste1
If Portb.3 = 1 Then Goto Taste2
Goto Anfang

Taste1:
Locate 2 , 1
Lcd "Taste 1"
Goto Anfang

Taste2:
Locate 2 , 1
Lcd "Taste 2"
Goto Anfang

wenn ich übrigens die remarks bei den config .... weglasse spuckt der
compiler nen fehler aus : "can't find hw-register"...


Nik

von Dieter (Gast)


Lesenswert?

Hallo Nik

Wenn du einzelne Pins einstellen willst, geht das über pind.1

'Config Portb.3 = Input
'Config Portb.2 = Input

Config Pinb.3 = Input
Config Pinb.2 = Input

Über Port geht immer nur ein ganzer Port

MFG

Dieter

von sebezahn (Gast)


Lesenswert?

Hi,

also du musst in BASCOM ebenfalls die Frequenz einstellen, am besten
als eines der ersten Befehle:

$regfile = "m128def.dat"   ' es wird ein atmega 128 verwendet
$crystal = 4000000         ' Quarz mit 4MHz
$baud = 19200              ' Baud-Rate für UART

Dann stimmen auch die Zeiten von Wait und Waitms ;-)

Gruß
Sebezahn

von Nik Bamert (Gast)


Lesenswert?

ok, danke, das funktioniert nun. Jedoch erkennt der Controller die
Tasten nicht richtig. Ich hab das so gemacht das er bei dereinen Taste
das Display nach rechts shiftet und bei der zweiten nach links.
Doch der LCD-Inhalt springt dauern umher. immer einen Schritt rechts,
dann einen nach links. als ob ich dauern die Taster drücken würde. Ich
hab die Spannungen nachgemessen normal ca 1 volt <- wesshalb?
gedrückt 5 volt.

Ich hab die Taster so angeshlossen wie im bild im anhang

Nik

von Nik Bamert (Gast)


Angehängte Dateien:

Lesenswert?

Ups hier noch das Bild :)

von Alexander H. (Gast)


Lesenswert?

Hi Nik,

falls du dein Problem noch nicht gelöst hast hier der Vorschlag:

Wenn du einen physikalischen Zustand eines Pins abfragen willst musst
du das unbedingt mit der if pinb.2 = 1 (oder 0) methode abfragen. die
portb.2 methode frägt nicht den physikalischen Zustand ab sondern das
Register von dem jeweiligen Port. da dieses bei die zuletzt auf 1
gesetzt wurde springt natürlich auch dein Display spazieren.

Ich würde mal empfehlen ein paar Stunden in die Hilfe zu investieren,
da stehen solche Probleme schoen beschrieben...

Falls du trotzdem noch Probleme haben solltest, kannst ja mal mailen
oder einfach hier im board fragen. Hier gibts echt ein paar µC Gods!

Gruss
Alex

von Hans Wurschd (Gast)


Lesenswert?

Toll, wir klatschen alle und freuen uns mit dir, dass du einen
drecks Atmel hast.

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.