PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anfängerfragen



Matscher
15.08.2006, 08:26
Hallo, gleich mal am Anfang ich bin in der MC Schiene ganz neu. Möchte aber mich jetzt mit der Materie vertraut machen.

Dazu habe ich mir das Pollin Bord gekauft dazu einen Atmega16.
Software habe ich: Bascom AVR und PonyProg.

Habe schon mal die Testsoftware auf das Board übertragen um zu Testen ob das Board geht
-> alles OK.

Möchte mir am Ende eine Reglung für die Heizung bauen mit allem drum und dran – das wird aber noch eine Weile dauern bis ich da am Ziel bin.

Jetzt mal zu meinen Fragen: Im Pollin Programm steht:

Dim A As Byte 'dimensionieren der verwendeten Variablen
Dim B As Byte

Für was sind diese Zeilen zuständig?


Portd = &B00000000 'definieren der einzelnen Pins an einem Port ( 0= low level; 1= high level)

Ist das Pegel der dann an den Ports anliegt, nach dem start?

Kann mir jemand sagen wie man Eingänge eines Ports AND u. OR verknüpft ?
z.B
Pind.2 + Pind.3 = Portd.6

Danke

franzl
15.08.2006, 10:20
Hallo matscher,
also das Dim A as Byte ist dazu da eine variable zu deklarieren
das portd = &B00000000 heißt das alle portd 0 signal haben
If pind.2=1 and pind.3=1 then
port d.6 = 1
end if

gandalf
15.08.2006, 12:55
Hallo Matscher,
Roland Walter hat eine nette Seite zum AVR erstellt. Schau mal unter
http://www.rowalt.de/mc/index.htm

Nicht entmutigen lassen.

Bernd

----------------------------------------------------------------------------------------
Was man noch nicht kennt, erklärt oft ein Experiment. (Dietrich Drahtlos)

(Ist nicht von mir, aber ich find seine Sprüche einfach genial. www.dietrich-drahtlos.de)

Matscher
15.08.2006, 13:12
Danke für die Antworten.

Es ist schon eine ganze Menge was man sich erst mal aneignen muss.

Werd jetzt mal die Seite Studieren.

wenn Fragen komen werde ich sie hier im Forum posten.

DerOlleKoN
15.08.2006, 22:49
Lernen kann man hier auf jeden Fall gut!

Als ich die Community hier gefunden habe, hatte ich von microcontrollern absolut 0 plan. Naja richtig gut kenne ich mich natürlich noch nicht aus. Aber ich mache Fortschritte und wenn man erstmal soweit ist, das man von der eigenen Idee aus umdenken kann wie man es mit einem mc lösen könnte ohne direkt drei riesen ??? im Kopf zu haben, dann fängt es an so richtig spass zu machen!

Kann auch nur sagen "Laß dich nicht entmutigen!" ;) vieles ist um einiges simpler als es aussieht und wenn man wirklich nicht weiterkommt dann bekommt man hier bestimmt hilfe von leuten die sowas oder etwas ähnliches schonmal gemacht haben.

In diesem Sinne...

Gruß

KoN

Reeper
16.08.2006, 00:06
Jo, sie ging/geht es mir auch.
Am Anfang null Ahnung und mit der Hilfe dieses Forums den Einstieg gefunden.
Nach knapp einem Jahr hämmerts immer mal, aber es gibt soviel interessantes zu lernen (Programmieren, Mechanik und Elektrik), sodass man immer wieder verblüfft ist, was wie zu machen ist :-)

Ohne die Hilfe hier hätte ich es nicht geschafft, ein großes Lob an alle Helfenden und Forenverantwortlichen =D>

Matscher
17.08.2006, 08:34
Guten Morgen, habe mir ml heut ein Display zusamen gebastelt. jetzt wollte ich dieses an das Board anschließen, dazu hab ich ein Flachbandkabel genommen und daran das Display gelötet -> Stecker in das Board fertig.

Die Pins sind richtig angeschlossen hab es nachgemessen.
Das display ist auch funktionstüchtig.

Jetzt hab ich mir das Programm zum Text ausgeben in mein Atmega übertragen, doch es regt sich nix am Display.

kann mir iner sagen warum wo der fehler ist.

$regfile = "m16def.dat"
$crystal = 8000000

Ddrc = &B11111111
Portc = &B00000000


Do
Config Lcd = 20 * 2
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.6 , Rs = Portc.5
Config Lcdbus = 4

Cls
Locate 1 , 1
Lcd "Hallo"

Loop

gandalf
17.08.2006, 12:00
kann mir einer sagen warum wo der fehler ist.

Loop

Ich denke mal dein Prog sollte so aussehen:

$regfile = "m16def.dat"
$crystal = 8000000

Config Lcd = 20 * 2
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.6 , Rs = Portc.5
Config Lcdbus = 4

INITLCD ' <<<< initialisiert das LCD -> Basom Hilfe

Cls

Do ' <<<<< Alles zwischen do und loop wird dauernd bearbeitet

Locate 1 , 1 ' <<<<< einfacher ist firstline siehe Bascom Hilfe
Lcd "Hallo"

Loop
End ' <<<< ohne End mault Bascom


Da die Initialisierung des LCD zwischen do und loop stand wird das LCD ständig neu initialisiert. Vieleicht stimmt auch der Kontrast an deinem LCD nicht, also das pot einfach mal durchdrehen.

Konnte aus Zeitmangel das Prog leider nicht testen, ich denke aber so funktionierts. Probiers mal aus.

Matscher
17.08.2006, 14:00
Ok das Problem ist glöst der Portc geht nicht richtig habe das Display jetzt mal an einen anderen gehangen und siehe da es geht.

Matscher
17.08.2006, 14:11
Nach etwas spielerrei ist mir aufgefallen das wenn man 2 Zeilen a 20 Zeichen hat und in der 1. nur Hallo steht und die 2. Zeile aber mehr als 20 Zeichen Text hat dieser Überhang an Zeichen verloren geht.

gibt es eine textweiterlauf Funktion damit man oben z.B. "Hallo" schreibt
und in die unterste Zeile "Hallo liebes Forum was gibt es neues"

Ich meine es so das die unterste Zeile horizontal läuft.

Ich muss sagen das die Bascom Hilfe für einen Anfänger nicht wirklich eine Hilfe ist.

Vitis
17.08.2006, 23:07
Schau mal in die Fuses beim
Beschreiben Deines Controllers,
da steht was von JTAG, das kannste
normalerweise deaktivieren

Matscher
18.08.2006, 08:43
Danke für den Hinweis mit JTAG jetzt geht es auch am C Port. :-)

So werd mich heute mit dem AD Wandler beschäftigen mal sehen was mich da erwartet.

Matscher
21.08.2006, 12:45
Hallo,
habe mich in den letzten Tagen mit dem AD Wandler beschäftigt.
Wollte nun mal einen Test durchführen. leider sind mir noh ein par Stellen unklar.
Wie Stelle ich im Bascom die Ref Spannung ein ich möchte die 5V als Ref. nutzen mach ich das in dieser zeile mit Singel? wenn nein für was steht es dann?
Config Adc = Single , Prescaler = Auto
Prescaler hab ich verstanden für was er da ist.

Wie muss ich den AREF pin beschalten zur zeit geht er bei mir ins leere?

So sieht der Rest von meinem programm aus.
Start Adc

Dim W As Word , Channel As Byte

Channel = 1

Do

W = Getadc(channel)
Cls

Lcd ; Channel ; W
Waitms 500

Loop
End
Im Display steht
1 1023
Was so viel bedeutet PA1 = 5V aber an dem Pin liegen keine 5V

Gento
21.08.2006, 13:12
Config Adc = Single , Prescaler = 64 , Reference = Avcc

Bedeutet er nimmt die Spannung die an Pin Ref anliegt , als Referenz.

Gento

Matscher
22.08.2006, 12:30
So bin wieder ein Stück weiter aber es steht schon wieder ein problem im Weg.
.
.
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Dim W As Word , I As Word , A As Word , Channel As Byte
Channel = 0

Do

W = Getadc(channel)
I = W / 10
A = W / 200

Cls

Lcd "Kanal " ; Channel ; " " ; A ; "V"
Locate 2 , 1
Lcd I ; "% "

Incr Channel
If Channel > 7 Then Channel = 0

Wait 1.5

Loop
End

Das ist das Programm was ich jetzt geschrieben habe. An den Ports A0-A7
hängt jeweils ein Poti dessen Position nun als % Anzeige auf dem Display erscheint.

Jetzt wollte ich aber mir noch die Spannung anzeigen lassen dafür hatte ich "A" vorgesehen.
Wollte den Analogwert durch 200 teilen was dann der Spannung am Port entspricht, leider zeigt mein Display nur die Stelle vor dem Komma.

Ich schätze mal das es mit A und der Word zuweisung zu tun hat, es ist bestimmt nicht genügent Platz um eine dezimalzahl zu Speichern?
(Word = 16Zeichen die Zahl vor dem Komma braucht ja schon 4 bleiben nur noch 12)
Stimmt meine Vermutung?

Wie kann ich es machen das er mir die Spannung anzeigt mit 2 oder 3 Kommastellen dahinter?

Matscher
22.08.2006, 13:36
OK habe das word gegen Singel getauscht dann zeigt er mir die komma stellen an.

Matscher
22.08.2006, 16:05
So eine Frage konnte ich mir nun doch nicht beantworten.
Mein Programm ist soweit ganz gut es macht das was ich wollte es liest die Stellung der Poties und gibt mir diese im Display an.

Habe auch die % Funktion etwas Verändert.

Ein hacken hat die ganze Geschichte noch wollte die Spannungsangabe nur mit 2 Komma stellen machen.
Habe dazu Fusing benutzt

jetzt liest er aber nicht mehr die Kanäle aus also mcht er schon noch aber nur wenn alle auf 0 Stehen sobald der 1-7 einen wert über 0 haben spinnt das Programm der 0 Kanal funzt allerdings

Kann mir einer sagen warum


$regfile = "m16def.dat"
$crystal = 8000000


Config Lcd = 20 * 2
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.0 , Rs = Portc.1
Config Lcdbus = 4

Config Adc = Single , Prescaler = 64 , Reference = Avcc

Start Adc

Dim A As Word , B As Single , C As Word , D As Word , E As Single , F As String * 5 , Channel As Byte

Channel = 0

Do

A = Getadc(channel) ' AD Wert wird in das A word geladen

B = 100 * A ' Zwischenrechen

C = B / 1023 ' Ausgabe der Prozente

D = C * 5 ' Zwischenrechnen um auf Volt zu kommen

E = D / 100 ' Ausgabe der Volt


F = Str(e) ' Runden auf 2 Kommastellen


Cls


Lcd "Kanal " ; Channel ; " " ; Fusing(e , "#.##") ; "V"
Locate 2 , 1
Lcd C ; "% "

Incr Channel
If Channel > 7 Then Channel = 0



Waitms 5

Loop
End