Forum: Mikrocontroller und Digitale Elektronik bascom_frage


von bascom_frage (Gast)


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?

von Gerd (Gast)


Lesenswert?

Du brauchst noch einen Pull-up oder Pull-down Widerstand. Entweder den
intern programmierbaren oder einen externen

von Dummschwaetzer (Gast)


Lesenswert?

> Eingangspin
dem einen?
Sicher dass es ein Eingangspin ist? Hast du eine pulldown mit dabei? 
Sicher dass der Eingangspin Strom anzeigt?
....

von bascom_frage (Gast)


Lesenswert?

Hallo ok,
ich hatte  gefragt, wie man es bewerkstelligt.
Damit meinte ich, wie man den einen Pin am Port als Eingang 
konfiguriert.

von Gerd (Gast)


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.

von Florian (Gast)


Lesenswert?

Poste Foto von der Schaltung und den Sourcecode

von bascom_frage (Gast)


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

von c-hater (Gast)


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.

von Frostbeule (Gast)


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.

von Dieter F. (Gast)


Lesenswert?

bascom_frage schrieb:
> Daher meine Frage:
> Wie konfiguriert man nun den Pin in Bascom, so dass wenn der Schalter
> geschaltet wird, er den Strom an Eingang signalisiert?

DU musst die Ampere runterskillen - insbesondere Freitags.

von Quakfrosch (Gast)


Lesenswert?

Dieter F. schrieb:
> bascom_frage schrieb:
>> Daher meine Frage:
>> Wie konfiguriert man nun den Pin in Bascom, so dass wenn der Schalter
>> geschaltet wird, er den Strom an Eingang signalisiert?
>
> DU musst die Ampere runterskillen - insbesondere Freitags.

Stehen Dir die Zähne zu eng?

von Mario M. (thelonging)


Lesenswert?

Unabhängig vom Thema: Prüfe Gleitkommazahlen nie auf Gleichheit!

von bascom_frage (Gast)


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

von Ben (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.