bascom_frage

Gast #5667377
Lesenswert?

Hallo,
ich habe ein Programm geschrieben, dass soweit auch funktioniert.
Schalten von Leds nach Zeiteinheiten, gesteuert über den Timer, jedoch 
habe ich Probleme dabei, einen Eingangsstrom fest zu stellen.

Ich habe einfach zwischen +5V u. dem Eingangspin einen Schalter 
installiert.

Daher meine Frage:
Wie konfiguriert man nun den Pin in Bascom, so dass wenn der Schalter 
geschaltet wird, er den Strom an Eingang signalisiert?
Gast #5667389
Lesenswert?

Ich nochmal: Also, wenn der Schalter +5 V schaltet, brauchst du einen 
Pull- down Widerstand extern z.B. 10kOhm, sonst hängt der Eingang in der 
"Luft", wenn der Schalter offen ist.

Falls du es ändern kannst, lege den Schalter an GRD( -, 0 Volt)und 
schalte den internen Pull-up Widerstand ein, dann brauchst Du keinen 
extra äußeren Widerstand.
Wie man den internen Pull- up Widerstand programmtechnisch einschaltet 
findest du in der BASCOM Anleitung.
Gast #5667414
Lesenswert?

$regfile = "m8def.dat"
$crystal = 1000000
$hwstack = 100
$swstack = 100
$framesize = 100


'1000000 (Systemtakt) / 8 Prescaler = 125000 Counts
'125000 Counts / 256 (8 Bit Timer) = 488 Interrupts die Sekunde
Config Timer0 = Timer , Prescale = 8
On Timer0 On_timer0_overflow
Enable Timer0
Enable Interrupts

Dim Prell As Single

Dim A As Integer
Dim B As Single
Dim C As Single
Dim D As Integer

Dim Rechnen As Integer

Config Portc.3 = Output
Roteled Alias Portc.3

Config Portb.0 = Output
Rotled1 Alias Portb.0
Config Portb.1 = Output
Rotled2 Alias Portb.1
Config Portb.2 = Output
Rotled3 Alias Portb.2
Config Portb.3 = Output
Rotled4 Alias Portb.3

A = 0
B = 0
C = 0
D = 0

Config Pinc.0 = Input
Dim Eingang_rot As Byte
Portc.0 = 1

Do
Eingang_rot = Pinc.0

   If Eingang_rot = 1 Then
      If Prell = 0 Then
         Prell = 1
         Timer0 = 0
      End If
   End If

   If Prell = 1 Then
      Roteled = 1
      If C >= 20 Then
         Roteled = 0
         Rotled1 = 0
         Rotled2 = 0
         Rotled3 = 0
         Rotled4 = 0
         A = 0
         B = 0
         C = 0
         D = 0
         Timer0 = 0
         Prell = 0
      Else
         '4 Sekunden langer piepston
         If C < 4 Then
            Piepser = 1
         Else
           Piepser = 0
         End If

         If B = 1 Then
            Rotled1 = 1
            Rotled2 = 0
            Rotled3 = 0
            Rotled4 = 0
         End If
         If B = 2 Then
            Rotled1 = 0
            Rotled2 = 1
            Rotled3 = 0
            Rotled4 = 0
         End If
         If B = 3 Then
            Rotled1 = 0
            Rotled2 = 0
            Rotled3 = 1
            Rotled4 = 0
         End If
         If B = 4 Then
            Rotled1 = 0
            Rotled2 = 0
            Rotled3 = 0
            Rotled4 = 1
         End If

      End If
   End If
Loop
End

On_timer0_overflow:
   If Prell = 1 Or Prell = 2 Then
      '488     1000ms
      ' 48     100ms
      A = A + 1
      D = D + 1
         '500ms
         Rechnen = 48 * 5
         If D = Rechnen Then
            B = B + 1
            If B = 5 Then
               B = 1
            End If
         D = 0
         End If

      If A = 488 Then
         C = C + 1
         A = 0
      End If
   End If
Return
Gast #5667455
Lesenswert?

bascom_frage schrieb:

> ich habe ein Programm geschrieben, dass soweit auch funktioniert.
> Schalten von Leds nach Zeiteinheiten, gesteuert über den Timer, jedoch
> habe ich Probleme dabei, einen Eingangsstrom fest zu stellen.

Nein, hast du nicht.

An keiner Stelle in deinem Programm hantierst du mit irgendeinem 
"Eingangsstrom". Wozu auch? Das ist nur eine blöde Ablaufsteuerung, um 
irgendwelche LEDs nach irgendeinem Schema anzusteuern, dafür braucht man 
natürlich keinen "Eingangsstrom".

> Ich habe einfach zwischen +5V u. dem Eingangspin einen Schalter
> installiert.

Aha, es ght also im Wesentlichen um die Abfrage eines Schalter/Tasters.

Dann ist das gewählte Konzept grundsätzlich ungünstig. Damit das 
funktionieren kann, bräuchtest du einen zusätzlichen externen 
Pulldown-Widerstand. Sinnvoller wäre: Schalter/Taster zwischen GND und 
Pin installieren, denn dann kann man die verfügbaren internen 
Pullup-Widerstände verwenden. Die muss man dann allerdings natürlich 
auch aktivieren. Und bei der Abfrage berückichtigen, dass ein "aktiver" 
Taster/Schalter eine 0 produziert, wenn man den ensprechenden Eingang 
befragt.
Gast #5667465
Lesenswert?

Bisschen planlos...

Du hast Pinc.0 als Eingang definiert und auch den Pullup mit Portc.0=1 
eingeschltet. Der Taster muß nun zwischen Pinc.0 und Masse und Du mußt
auf "0" auswerten, denn der Pin wird dann bei Tastendruck auf GND d.h 0 
gezogen.

Das eigentliche Programm ist mir zu unübersichtlich, weil die Variablen 
keine "sprechenden" Namen haben.

Such auch mal in der Hilfe nach "Select Case" Das macht die Verzweigerei 
viel übersichtlicher.
Gast #5667652
Lesenswert?

@ Frostbeule: Danke funktioniert...Select Case -> werde ich machen
@c-hater: Sinnvoller wäre: Schalter/Taster zwischen GND und
Pin installieren-> hab ich gemacht

Es funktioniert jetzt...danke
Gast #5668273
Lesenswert?

Es ist schon gut das die Leute so ruhig geblieben sind... Hättest 
schreiben sollen..ich habe keine Ahnung, habe es geschafft einen Code im 
µC hineinzukopieren, Es gibt tolle Bascombücher, Bascomseiten und Foren. 
Wie man einen Widerstand für eine LED ermittelt oder eine Ein/Ausgang 
Pin konfiguriert steht in tausend Foren... aber gut schnell, schnell ist 
die Mentalität, also nicht wundern wenn die Antwort dementsprechend 
fällt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren