Archiv verlassen und diese Seite im Standarddesign anzeigen : Erstes Projekt mit Mikrocontroller
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, 14: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
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, 16: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 ;-)
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
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
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
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
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
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
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
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?
ja 0,5V zu wenig mit Pech floddet er wild vor sich rum
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
Solte ohne KüKo gehen Stromverbrauch ca. 30-50mA würde ich jetzt mal schätzen
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
Würde ich Analog machen, Ambesten machst einen Spannungsteiler also:
5V -> Fotowiederstand -> ADC <- Wiederstand <- GND.
mfg tb
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
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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.