- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 19

Thema: Erstes Projekt mit Mikrocontroller

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    11.07.2008
    Alter
    30
    Beiträge
    175

    Erstes Projekt mit Mikrocontroller

    Anzeige

    Powerstation Test
    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?

    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
    
    
     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 (L29 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

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    Hallo V-Robot,

    Code:
    Config Ddra.1 = 0 
    usw....
    ist die falsche Syntax!
    Entweder du schreibst
    Code:
    ddra.1 = 0
    oder
    Code:
    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

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    11.07.2008
    Alter
    30
    Beiträge
    175
    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:
    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
    
    
     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

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    Du musst IMMER erst die innere Schleife (also loops, ifs, whiles, usw.) beenden, bevor du die äußere beendest.

    Hier mal dein Code
    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
    Code:
    Portx.y = z
    Hast du wirklich alles verstanden? Das hier sind die Basics der Basics

  5. #5
    Erfahrener Benutzer Roboter Experte Avatar von Neutro
    Registriert seit
    28.10.2007
    Ort
    Ostfriesland
    Alter
    44
    Beiträge
    642
    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
    Jemand mit einer neuen Idee ist ein Spinner, bis er Erfolg hat.
    (Mark Twain)

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    11.07.2008
    Alter
    30
    Beiträge
    175
    Jetzt habe ich den Code nochmal überarbeitet, aber was bedeutet schon wieder die Fehlermeldung: LOOP expected?

    CODE:
    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

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    11.07.2008
    Alter
    30
    Beiträge
    175
    Ah, jetzt hab ichs hinbekommen. Da war ein Do zu viel...
    Naja, erstmal DANKE an euch. Werde warscheinlich nochmals eine Frage haben.

    MfG
    V-Robot

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.02.2006
    Beiträge
    164
    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

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    11.07.2008
    Alter
    30
    Beiträge
    175
    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

  10. #10
    Erfahrener Benutzer Roboter Experte Avatar von Neutro
    Registriert seit
    28.10.2007
    Ort
    Ostfriesland
    Alter
    44
    Beiträge
    642
    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
    Jemand mit einer neuen Idee ist ein Spinner, bis er Erfolg hat.
    (Mark Twain)

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests