www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Atmega16


Autor: Nik Bamert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bernd Schmidt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Nik

und mit
'waitms 10

"blinkt" die LED munter mit 50 Hz.

versuch mal  'waitms 500


Bernd

Autor: Nik Bamert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ludwig Meafe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Nik Bamert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Nik Bamert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

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

Gruß Oliver

Autor: Nik Bamert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Oliver (Gast)
Datum:

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

Autor: Nik Bamert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: sebezahn (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Nik Bamert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Nik Bamert (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ups hier noch das Bild :)

Autor: Alexander H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hans Wurschd (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.