-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: rauf-runterzählen

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.545

    rauf-runterzählen

    Anzeige

    servus leude,

    ich habe ja das RN-Control board, mit einem atmega32, welchen ich mit Bascom programmiere.....
    jetzt wollte ich mir mal ein programm schreiben, bei dem ich 5 leds (die, die schon aufm board sind) steuern kann:
    ich wollte dafür die 5 on-board taster benutzen (vorerst nur 2)....
    in dem programm gibt es den wert i .... dieser ist nie <1 und > 5... i best. die anzahl der zu leuchtenden leds. wenn t1 gedrückt wird, soll i = i - 1 sein.... wenn t2 gedrückt wird, soll i = i + 1 sein..... also entweder 1 rauf oder runter...
    wenn i = 1 ist, soll die erste led leuchten, bei i = 2 die 2. led , usw.

    habe hier auch schon ein programm, allerdings funktioniert das nicht.
    die meisten leds flimmern immer so komisch. zwar leuchtet eine led wenn ich einen taster drücke, allerdings nur solange der taster gedrückt ist......
    ich möchte aber, dass sie auch nach dem loslassen des taster noch leuchtet?!!!
    außerdem wollte ich später noch eine funktion einbauen, bei der der wert i nach einem tastendruck (im eeprom??) gespeichert wird, damit nach reset der schaltung i wider vorhanden ist...... allerdings habe ich keine ahnung, wie ich das realisieren soll???

    hier nun mein code:

    Code:
    $regfile = "m32def.dat"
    $crystal = 16000000
    
    Config Adc = Single , Prescaler = Auto
    Config Portc = Output
    
    L1 Alias Portc.0
    L2 Alias Portc.1
    L3 Alias Portc.2
    L4 Alias Portc.3
    L5 Alias Portc.4
    
    Portc.0 = 1
    Portc.1 = 1
    Portc.2 = 1
    Portc.3 = 1
    Portc.4 = 1
    
    Dim I As Word
    Dim X As Word
    
    X = 1
    
    Do
     Start Adc
     X = Getadc(7)
     If X < 130 Then
      I = I - 1
      Waitms 20
      If I = 1 Then
      L1 = 0
      L2 = 1
      L3 = 1
      L4 = 1
      L5 = 1
     Elseif I = 2 Then
      L1 = 1
      L2 = 0
      L3 = 1
      L4 = 1
      L5 = 1
     Elseif I = 3 Then
      L1 = 1
      L2 = 1
      L3 = 0
      L4 = 1
      L5 = 1
     Elseif I = 4 Then
      L1 = 1
      L2 = 1
      L3 = 1
      L4 = 0
      L5 = 1
     Elseif I = 5 Then
      L1 = 1
      L2 = 1
      L3 = 1
      L4 = 1
      L5 = 0
     Elseif I > 5 Then
      I = 1
     End If
     Elseif X < 220 Then
      I = I + 1
      Waitms 20
      If I = 1 Then
      L1 = 0
      L2 = 1
      L3 = 1
      L4 = 1
      L5 = 1
     Elseif I = 2 Then
      L1 = 1
      L2 = 0
      L3 = 1
      L4 = 1
      L5 = 1
     Elseif I = 3 Then
      L1 = 1
      L2 = 1
      L3 = 0
      L4 = 1
      L5 = 1
     Elseif I = 4 Then
      L1 = 1
      L2 = 1
      L3 = 1
      L4 = 0
      L5 = 1
     Elseif I = 5 Then
      L1 = 1
      L2 = 1
      L3 = 1
      L4 = 1
      L5 = 0
     Elseif I > 5 Then
       I = 1
     End If
     End If
    Loop
    
    End
    Code Tags verwenden, sieht übersichtlicher aus ! (PicNick)




    fragen über fragen, ich hoffe, ihr könnt mir (wenigstens teilweise) helfen!

    mfg
    chris

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Hallo Chris,
    programm-mäßig sollte dies das gleiche wie deines machen. Kleinere Fehler sind dabei behoben.

    Code:
    $regfile = "m32def.dat"
    $crystal = 16000000
    
    Config Adc = Single , Prescaler = Auto
    Config Portc = Output
    
    Portc = 31
    
    Dim I As Word
    Dim X As Word
    
    X = 1
    
    Do
       Start Adc
       X = Getadc(7)
       If X < 130 Then
          I = I - 1
          If I = 0 Then I = 5
       Elseif X < 220 Then
          I = I + 1
          If I = 6 Then I = 1
       End If
       Waitms 20
       Portc = 31
       Portc.i = 0
       End If
    Loop
    
    End
    Annahme ist, dass die beiden Taster überWiderstände am PORTA.7 angeschlossen sind.
    Wenn der erste gedrückt ist, kommt ein Wert kleiner 130 raus, wenn der zweite gedrückt ist, ist der Wert zwischen 130 und 220.
    Welcher Wertwird ausgegeben, wenn kein Taster gedrückt ist?
    Wenn ein Taster länger als deine 20ms Wartezeit gedrückt ist, springt die LED mehrfach weiter.

    Gruß

    Rolf

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.545
    hallo Rolf,

    was beudetet den das portc = 31 ????
    bei diesem programm passiert fast genau das selbe, wie bei meinem prog!!
    am amfang, beim anlegen der betriebsspannung, leuchtet die erste led, wenn ich t2 drücke, geht led1 aus und led2 leuchtet.... wenn ich dann nochmal t2 drücke, dann geht led2 aus und keine led leuchtet mehr?!!??!?!??!

    mfg
    chris

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Code:
    X = 1 
    Do 
    ....
    du wolltest sicher schreiben
    I = 1

    denk' ich
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Hallo Chris,
    hier sind noch einige Fehler korrigiert.

    Code:
    $regfile = "m32def.dat"
    $crystal = 16000000
    
    Config Adc = Single , Prescaler = Auto
    Config Portc = Output
    
    Portc = 62                            'hier werden die Ausgänge 1-5 auf 1 gesetzt (00111110)
    Start Adc
    
    Dim I As Byte
    Dim X As Word
    
    X = 1
    I = 1
    Do
       X = Getadc(7)
       If X < 130 Then
          I = I - 1
          If I = 0 Then I = 5
       Elseif X > 220 Then
          I = I + 1
          If I = 6 Then I = 1
       End If
       Waitms 20
       Portc = 62
       Portc.i = 0
    Loop
    
    End
    Welchen Wert gibt Getadc(7) zurück, wenn kein Taster gedrückt ist und wie reagiert das Programm?

    Gruß

    Rolf

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Andree-HB
    Registriert seit
    10.12.2004
    Ort
    Bremen
    Alter
    47
    Beiträge
    2.561
    was beudetet den das portc = 31 ????
    ...an den Pins vom Port C wird damit die binäre Analogie von dezimal 31 ausgegeben.

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.545
    könntest du mir erklären, was binäre analogie ist???

    mfg
    chris

  8. #8

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Hallo Chris,
    zum Dualsystem (binär) schau mal hier
    http://de.wikipedia.org/wiki/Dualsystem

    Wie ich schon geschrieben habe bedeutet

    PORTC=31 ' = &B00011111

    soviel wie

    PORTC.0=1
    PORTC.1=1
    PORTC.2=1
    PORTC.3=1
    PORTC.4=1
    PORTC.5=0
    PORTC.6=0
    PORTC.7=0

    Ist halt nur etwas kürzer.
    Ich hatte mich übrigens zwischendurch von deinem L1 usw. ablenken lassen und dachte, du hättest mit PORTC.1 angefangen. War natürlich Quatsch. Also ist 31 bei deinen Anschlüssen richtig.
    Du hast immer noch nicht die Frage beantwortet:

    Welchen Wert gibt Getadc(7) zurück, wenn kein Taster gedrückt ist und wie reagiert das Programm?

    Dann könnte man dir evtl. noch weiterhelfen.

    Gruß

    Rolf

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.545
    wenn kein taster gedrückt ist, ist x = 0 .
    dadurch wird solange das der fall ist, immer i = i - 1 gelten......
    dadurch zählt das prog von 65353 (glaube ich) bis 0 runter, dann gehts wider so weiter!!

    mfg
    chris

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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