-         

Ergebnis 1 bis 7 von 7

Thema: Wie werden Variablen in Bascom definiert?

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.09.2006
    Beiträge
    114

    Wie werden Variablen in Bascom definiert?

    Anzeige

    Hallo,

    ich habe jetzt meine Schaltung aus einem ATMEGA32 und 2 LEDs zusammengebaut und wollte den Controlle jetzt so programmieren, dass die beiden LEDs abwechselnd jede Sekunde ein und aus gehen!
    Das ist auch kein Problem, ich wollte dann aber auch noch ausprobieren, wie das mit dem Variablen definieren geht, und habe den Code deshalb so umgeschrieben, dass ich mit einer Variable arbeite. Das geht aber aus irgendwelchen Gründen nicht, denn es kommen mehrere Fehler, die ich aber alle nicht verstehe!

    Das ist der Code, den ich mir ausgedacht habe:
    Code:
     $regfile = "m32def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 1000000
    
    Config Portc.0 = Output
    Config Portc.1 = Output
    
    
    
    Dim A As String * 1
    
    A = 1
    
    Do
    If A = 1 Then
      Portc.0 = 1
      Portc.1 = 0
      A = 0
      Waitms 1000
    
      Else:
      Portc.0 = 0
      Portc.1 = 1
      A = 1
      Waitms 1000
    
      End If
    Loop
    
    End

    Vielen Dank für eure Hilfe.
    Thomas

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    06.08.2004
    Beiträge
    378
    Hi,

    mach mal aus den Strin ein Bit
    Dim A as Bit

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.09.2006
    Beiträge
    114
    Okay, danke. Das funktioniert jetzt.

    Aber ich habe auch eine neue Sache, die mir aufgefallen ist:

    Code:
    $regfile = "m32def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 1000000
    
    Config Portc.0 = Output
    Config Portc.1 = Output
    Config Pina.7 = Input
    Porta.7 = 1
    
    Portc.0 = 0
    Portc.1 = 0
    
    End

    Wenn ich diesen Code verwende, werden anscheinend beide Outputs auf 5V gesetzt, denn die LEDs, die ich dran gehängt habe, leuchten!





    Code:
    $regfile = "m32def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 1000000
    
    Config Portc.0 = Output
    Config Portc.1 = Output
    Config Pina.7 = Input
    Porta.7 = 1
    
    
    
    Do
    If Pina.7 = 1 Then
    Portc.0 = 1
    Else
    Portc.0 = 0
    End If
    Loop
    Wenn ich diesen Code nehme, lässt sich die LED an Portc.0 mit dem angeschlossenem Taster ein und ausschalten, die andere LED brennt die ganze Zeit!

    So meine Frage:
    Warum wird in der If-Schleife, wenn man den Pin auf 1 setzt die LED eingeschaltet, außerhalb der If-Schleife aber genau umgekehrt?
    Normalerweise sollte man doch denken, dass "1" immer "LED eingeschaltet" bedeutet, oder?

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    06.11.2006
    Ort
    Lörrach
    Alter
    48
    Beiträge
    24
    Kommt darauf an wie die LED angeschlossen ist. Wenn diese mit der Anode an 5V hängt und mit der Kathode am Pin des µC (natürlich mir Widerstand) dann erhälst du dieses Ergebnis.

    Gruß
    Udo

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.09.2006
    Beiträge
    114
    Mh, scheint so. Ich habe das nämlich so nachgebaut wie im Wiki unter AVR-Einstig leicht gemacht erklärt ist.

    Welche andere Möglichkeit gibt es denn noch?

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    06.11.2006
    Ort
    Lörrach
    Alter
    48
    Beiträge
    24
    Mann könnte die LED mit der Anode mit dem µC-Pin verbinden und die Kathode der LED mit Masse (ebenfalls wieder mit Vorwiderstand).
    Der µC-Pin kann 3 verschiedene Zustände annehmen, einmal als Quelle, d.h. es kommen 5V aus dem Controller, einmal als Senke, d.h. der Pin wird intern gegen Masse geschalten und dann kann der Pin noch hochohmig geschalten werden (als Eingang).
    Diese Erklärung ist nur sehr oberflächlich also bitte nicht gleich hauen.

    Udo

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    So meine Frage:
    Warum wird in der If-Schleife, wenn man den Pin auf 1 setzt die LED eingeschaltet, außerhalb der If-Schleife aber genau umgekehrt?
    Also - Deine LED´s scheinen ja schon mal so geschaltet zu sein, dass sie mit dem "Pluspol" (Anode) zum Controller gehen, und mit dem "Minuspol" (Kathode) nach Masse. Damit sie leuchten, muss der Ausgang also High sein.

    Oft gehen die Taster aber nach Masse und nicht zur Versorgungsspannung, so dass damit angesteuerte Eingänge beim Tastendruck LOW werden. Ist auch ganz sinnvoll, denn die Pins der Controller haben idR halt nur PullUP-Widerstände, die den Eingang auf ein saubers HIGH legen, wenn sie nach außen "in der Luft" hängen.
    Check´doch mal, ob das bei Deinem Board auch so ist. Dann wäre Dein Pina.7 nämlich 0, wenn Du den Taster drückst, und beim Loslassen wäre er 1. Das erfordert zwar ein gewisses Umdenken, erklärt aber das Verhalten Deiner Schaltung.

Berechtigungen

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