PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Erstes Projekt mit Mikrocontroller



v-robot
18.04.2010, 12:32
Hallo zusammen,
Ich habe mich mittlerweile gut in ,,AVR - Einstieg leicht gemacht" und weitere Themen eingelesen und möchte nun mein erstes Projekt mit einem Mikrocontroller bauen, einen Roboter.
Es sollen über 2 Fotowiderstände 2 Motoren gesteuert werden. Jetzt habe ich mal ein kleines Programm geschrieben, doch beim Kompilieren erscheint eine Fehlermeldung:

Unknown Config Parameter --> Config DDRA.1 + Config DDRA.2


Könnt ihr mir helfen, was das ist?


$regfile = "m32def.dat" 'Die Anweisung bestimmt Controllertyp, hier AVR Mega 32
$framesize = 32 'Stackanweisungen, die eigentlich nur bei größeren Programmen
$swstack = 32 'wirklich nötig werden
$hwstack = 32
$crystal = 16000000 'Die Frequenz des verwendeten Quarzes


Config Ddra.1 = 0 'Pins A.1 und A.2 werden als Eingänge konfiguriert
Config Ddra.2 = 0
Config Ddra.3 = 1 'Pins A.3 und A.4 werden als Ausgänge konfiguriert
Config Ddra.4 = 1
Config Porta.1 = 1 'Pullupwiderstand der Eingänge wird aktiviert
Config Porta.2 = 1
Config Porta.3 = 0 'Ausgänge werden auf LOW gesetzt
Config Porta.4 = 0
Config Ddrb.1 = 0 'Eingang für Start-Taster wird konfiguriert
Config Portb.1 = 1 'Pullupwiderstand wird aktiviert

Do
If Pinb.1 = 1 Then 'Bei Betätigung des Tasters...


If Pina.1 = 1 Then 'Wenn Lichtsensor 1 auf HIGH,...
Porta.3 = 1 'Dann Motor 1 auf HIGH,...
Else 'Sonst Motor 1 auf LOW
Porta.3 = 0

While 'Gleichzeitig
If Pina.2 = 1 Then 'Wenn Lichtsensor 2 auf HIGH,...
Porta.4 = 1 'Dann Motor 2 auf HIGH,...
Else 'Sonst Motor 2 auf LOW
Porta.4 = 0

Loop 'Wiederholen

End If Pinb.1 = 1 'Bei erneuter Betätigung des Tasters beenden

Nätürlich ist mir klar, dass ich dann noch zwei Motortreiber (L298) brauche und die Fotowiderstände nicht einfach so angeschlossen werden können (evtl. Spannungsteiler mit 1k-Poti?).

Als Board verwende ich ein selbstgebautes, das aus folgenden Teilen besteht: Lochraster, 40pol. Sockel, Anschlussklemmen, Atmega8, 10pol. Wannenstecker, LM7805, 2200µF, 3 * 100nF, 2 * 22pF, 10k, 16Mhz

Ich hoffe ihr könnt mir möglichst schnell helfen.
DANKE im Voraus

MfG
V-Robot

Che Guevara
18.04.2010, 13:53
Hallo V-Robot,



Config Ddra.1 = 0
usw....

ist die falsche Syntax!
Entweder du schreibst


ddra.1 = 0

oder


config porta.1 = input

beides bewirkt das gleiche.

Aber deine "Mischung" erkennt BASCOM nicht.

Bei den Fotowiederständen wirst du größere Wiederstände brauchen!
Am besten hat sich der gleiche Wert erwiesen, der am Fotowiederstand bei mittlerer Beleuchtung auftritt. Das ist mit Sicherheit ein vielfaches von 1kOhm.

Gruß
Chris

v-robot
18.04.2010, 14:53
Hi,
Schonmal DANKE.
Habe das jetzt umgeändert, doch jetzt kommt noch folgende Fehlermeldung hinzu:

Error:7 Line:0 IF THEN expected (36) , in File:
Error:23 Line:0 END IF expected , in File:

Wie gesagt, der Code sieht bis jetzt so aus:

$regfile = "m32def.dat" 'Die Anweisung bestimmt Controllertyp, hier AVR Mega 8
$framesize = 32 'Stackanweisungen, die eigentlich nur bei größeren Programmen
$swstack = 32 'wirklich nötig werden
$hwstack = 32
$crystal = 16000000 'Die Frequenz des verwendeten Quarzes


Ddra.1 = 0 'Pins A.1 und A.2 werden als Eingänge konfiguriert
Ddra.2 = 0
Ddra.3 = 1 'Pins A.3 und A.4 werden als Ausgänge konfiguriert
Ddra.4 = 1
Ddrb.1 = 0 'Eingang für Start-Taster wird konfiguriert
Config Porta.1 = 1 'Pullupwiderstand der Eingänge wird aktiviert
Config Porta.2 = 1
Config Porta.3 = 0 'Ausgänge werden auf LOW gesetzt
Config Porta.4 = 0
Config Portb.1 = 1 'Pullupwiderstand wird aktiviert

Do
If Pinb.1 = 1 Then 'Bei Betätigung des Tasters...


If Pina.1 = 1 Then 'Wenn Lichtsensor 1 auf HIGH,...
Porta.3 = 1 'Dann Motor 1 auf HIGH,...
Else 'Sonst Motor 1 auf LOW
Porta.3 = 0

If Pina.2 = 1 Then 'Wenn Lichtsensor 2 auf HIGH,...
Porta.4 = 1 'Dann Motor 2 auf HIGH,...
Else 'Sonst Motor 2 auf LOW
Porta.4 = 0

Loop 'Wiederholen

End If
Pinb.1 = 1 'Bei erneuter Betätigung des Tasters beenden

Hoffe, du kannst mir helfen.
DANKE

MfG
V-Robot

Che Guevara
18.04.2010, 15:27
Du musst IMMER erst die innere Schleife (also loops, ifs, whiles, usw.) beenden, bevor du die äußere beendest.

Hier mal dein Code


$regfile = "m32def.dat" 'Die Anweisung bestimmt Controllertyp, hier AVR Mega 8
$framesize = 32 'Stackanweisungen, die eigentlich nur bei größeren Programmen
$swstack = 32 'wirklich nötig werden
$hwstack = 32
$crystal = 16000000 'Die Frequenz des verwendeten Quarzes


Dim Mot_flag As Bit
Mot_flag = 0


Ddra.1 = 0 'Pins A.1 und A.2 werden als Eingänge konfiguriert
Ddra.2 = 0
Ddra.3 = 1 'Pins A.3 und A.4 werden als Ausgänge konfiguriert
Ddra.4 = 1
Ddrb.1 = 0 'Eingang für Start-Taster wird konfiguriert
Porta.1 = 1 'Pullupwiderstand der Eingänge wird aktiviert
Porta.2 = 1
Porta.3 = 0 'Ausgänge werden auf LOW gesetzt
Porta.4 = 0
Portb.1 = 1 'Pullupwiderstand wird aktiviert


Do


If Pinb.1 = 1 Then Toggle Mot_flag 'Bei Betätigung des Tasters...

If Mot_flag = 1 Then

If Pina.1 = 1 Then 'Wenn Lichtsensor 1 auf HIGH,...
Porta.3 = 1 'Dann Motor 1 auf HIGH,...
Else 'Sonst Motor 1 auf LOW
Porta.3 = 0
End If

If Pina.2 = 1 Then 'Wenn Lichtsensor 2 auf HIGH,...
Porta.4 = 1 'Dann Motor 2 auf HIGH,...
Else 'Sonst Motor 2 auf LOW
Porta.4 = 0
End If

Else

Porta.3 = 0
Porta.4 = 0

End If


Loop 'Wiederholen


Außerdem werden Pullups ohne "Config" geschrieben, einfach nur


Portx.y = z

Hast du wirklich alles verstanden? Das hier sind die Basics der Basics ;-)

Neutro
18.04.2010, 18:02
Generell gilt das zu jeder If Abfrage immer ein end if gehört.

Beispiel:
If A = 10 Then
Porta.1=0
else
Porta.1 =1
end if

If...Then
...
...
end if

Gruß

Neutro

v-robot
18.04.2010, 20:07
Jetzt habe ich den Code nochmal überarbeitet, aber was bedeutet schon wieder die Fehlermeldung: LOOP expected?

CODE:

$regfile = "m32def.dat" 'Die Anweisung bestimmt Controllertyp, hier AVR Mega 32
$framesize = 32 'Stackanweisungen, die eigentlich nur bei größeren Programmen
$swstack = 32 'wirklich nötig werden
$hwstack = 32
$crystal = 16000000 'Die Frequenz des verwendeten Quarzes
$baud = 9600 'Baudrate für RS232-Ausgabe


Config Porta.0 = Output
Motorlinks Alias Porta.0
Config Porta.1 = Output
Motorrechts Alias Porta.1

Porta.0 = 0
Porta.1 = 0

Config Pinb.0 = Input
Taster Alias Pinb.0
Config Pinb.1 = Input
Fotolinks Alias Pinb.1
Config Pinb.2 = Input
Fotorechts Alias Pinb.2

Portb.0 = 1
Portb.1 = 0
Portb.2 = 0

Do

If Taster = 0 Then

Do

If Fotolinks = 1 Then
Motorlinks = 1
Else
Motorlinks = 0
End If

If Fotorechts = 1 Then
Motorrechts = 1
Else
Motorrechts = 0
End If

Else
Motorlinks = 0
Motorrechts = 0

End If

Loop

v-robot
18.04.2010, 20:11
Ah, jetzt hab ichs hinbekommen. Da war ein Do zu viel:D...
Naja, erstmal DANKE an euch. Werde warscheinlich nochmals eine Frage haben:D.

MfG
V-Robot

veit
18.04.2010, 20:13
naja du hast zweimal ein "DO" drinstehen ... darauf muss ein loop folgen ...

vielleicht übst du mal lieber ein wenig programmieren mit visual basic (kostenlos visual studio express laden)
das zeigt dir nämlich immer gleich die fehler an direkt wenn du eine zeile beendest ... ist vielleicht nicht so frustrierend.

ansonsten einfach üben üben üben

v-robot
23.04.2010, 13:15
Hallo zusammen,
habe eben mein Programmierkabel erhalten (Parallelort) und bin die Anleitung ,,Bascom - erstes Programm in den Controller laden" Stück für Stück durchgegangen, doch wenn ich auf den Übertragungsmodus klicken will, kommt folgende Fehlermeldung:

Could not identify chip with ID:000000

Könnt ihr mir helfen?
V-Robot

Neutro
23.04.2010, 16:21
Hast du den richtigen Programmertyp eingestellt?
Stimmt die LPT Adresse?
Hast du die Versorgungsspannung des µControllers angeschlossen?
Sind die Programmierleitungen (Reset, MISO, MOSI, SCK) an den richtigen Pins des Controllers angeschlossen?
Wird der Programmer auch mit Spannung versorgt?
Sind die Masseleitungen alle untereinander verbunden?
Was hast du für eine Schaltung, RN Controll, Eigenbau ?- falls ja bitte Schaltplan des Eigenbau posten.

Gruß

Neutro

v-robot
23.04.2010, 20:04
Ja ich wollte ein selbstgebautes board verwenden. Der Schaltplan dazu ist der des Artikels ,,Spannung stabilisieren" dieses Eintrages:

http://www.rn-wissen.de/index.php/AVR-Einstieg_leicht_gemacht

Die paar Pins werd ich dann jetzt mal durchmessen.

DANKE

MfG

V-ROBOT

v-robot
24.04.2010, 11:39
Was is jetzt schon komisch finde, ist am LM7805:

Zwischen Vin und GND mess ich 3,86V und zwischen Vout und GND nur 0,02V. Das Netzteil, dass davor geschaltet ist funktioniert und läuft auf 7,5V (getestet). Da kann doch etwas mit dem 7805 nicht stimmen oder?

theborg
24.04.2010, 11:49
ja 0,5V zu wenig mit Pech floddet er wild vor sich rum

v-robot
24.04.2010, 14:40
Achso, danke. Dann liegt der Fehler da. Meint ihr, wenn ich ein 12V-Netzteil davorschalte, brauche ich einen Kühlkörper? Und noch eine andere Frage. Wie viel Milliampere zieht solch eine Microcontroller-Grundschaltung höchstens?

DANKE

MfG

V-Robot

theborg
24.04.2010, 18:32
Solte ohne KüKo gehen Stromverbrauch ca. 30-50mA würde ich jetzt mal schätzen

v-robot
25.04.2010, 19:33
So, habe mein selbstgabautes Board jetzt erstmal vollendet.
Habe doch noch einen Kühlkörper angeschraubt, um auf der sicheren Seite zu sein.
Zum Testen habe ich das Programm mit der blinkenden LED draufgeladen und siehe da: Es klappt perfekt.
Jetzt geht es jedoch weiter. Will ja schließlich irgendwann in meinem Leben mal zu einem fertigen fahrenden Roboter kommen. Jetzt ist die Frage an euch:

Wie kann ich einen Fotowiderstand analog anschließen und auswerten? Oder ist es digital genau so einfach? Und wenn ja, was benötige ich dann (Poti, Transistor)?

DANKE im Voraus

MfG

V-Robot

theborg
26.04.2010, 08:12
Würde ich Analog machen, Ambesten machst einen Spannungsteiler also:

5V -> Fotowiederstand -> ADC <- Wiederstand <- GND.

mfg tb

Neutro
26.04.2010, 10:16
Hier mal ein Link wie man unter Bascom Spannungen messen kann:
http://www.mikrocontroller.net/topic/88128

Und hier noch was über den LDR:
http://home.arcor.de/d.mietke/bauteile/ldr.html

Gruß

Neutro

v-robot
04.05.2010, 21:53
Könnt ihr mir auch noch rasch beim Bau eines Netzteils helfen?:

Ich möchte eine getrennte Spannung (+12V, GND, -12V) aus meinem RKT
(2 x 12V, 120VA). Wie könnte ich das anstellen? Eventuell mit ,,getunten" LM7812's? und wie kann ich die Spannung gleichrichten? Mit 10 Ampere ist das nunmal nicht so einfach wie mit 0,5:D.
Als Glättungskondensatoren habe ich hier noch 2 x 6800µF. Als Sicherung hatte ich in der Plusleitung vom Gleichrichter 6,3A träge vorgesehen.

Würde mich über einfache und billige Schaltungen freuen!

DANKE
im Voraus

MfG

V-Robot