-
        

Ergebnis 1 bis 2 von 2

Thema: GETKBD() und RC5Send mit Tiny2313

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594

    GETKBD() und RC5Send mit Tiny2313

    Anzeige

    Hi!

    Ich habe ein kleines Problem mit der Kombination aus GETKBD() und RC5Send beim Tin2313.

    1: Ich lese eine 4x7 Matrix-Tastatur aus. - Das geht super.
    2: Ich sende mit RC5Send RC5-Codes - Das geht auch super.

    1+2: Ich kann die eingelesenen Codes verarbeiten und auch versenden, aber da PinB.3 (OC1a) ja zwingend für das Senden benutzt werden muss, macht er Probleme mit seiner Keyboard-Spalte.
    Ich bekomme auf allen Tasten dieser Spalte immer nur 27 als Wert.
    Es sollten eigentlich 23, 19, 15, 11 und 7 sein

    Jetzt ist das Auslesen der Matrix ja keine große Sache, man kann die Pins anderweitig einsetzen. Nur gelingt mir das nicht wirklich. Input/Output und auch 0/1 umschalten führen nicht weiter. Oder ich finde die richtige Kombination nicht.
    Wer weiß was?


    Code:
    $regfile = "attiny2313.dat"
    $crystal = 8000000
    $hwstack = 64
    $swstack = 16
    $framesize = 21
    $baud = 9600
    
    Config Kbd = Portb , Debounce = 100 , Rows = 6 , Row5 = Pind.5 , Row6 = Pind.4
    
    Declare Sub Rc5_senden(key_code As Byte)
    
    Dim Key_scan As Byte
    
    Do
       Key_scan = Getkbd()
       If Key_scan <> 24 Then
          Call Rc5_senden(key_scan)
       End If
       Waitms 40
    Loop
    
    End
    
    
    Sub Rc5_senden:
    Local Togbit As Byte , Address As Byte
    Togbit = 0                                         
    Address = 0
    Config Pinb.3 = Output
    Rc5send Togbit , Address , Key_code
    End Sub Rc5_senden

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    OK, ich hab die Matrix-Abfrage jetzt noch auf Interrupts umgestellt...
    Funktioniert sehr gut, ist sicherlich die sauberere Lösung. Denn auch wenn der AVR nicht anderes als ne Fernbedienung sein soll, kann man so ja später noch prima den Stromspar-Modus zuschalten...

    Den Code habe ich modifiziert von hier übernommen:
    http://www.mcselec.com/index.php?opt...=175&Itemid=41
    (SourceCodes -> EDBexperiment10.bas)

    Verwendet wird der PinChange-Interrupt (sehr praktisch, kannte ich noch garnicht )

    Dummerweise kommt immer noch 27 - klar, im Prinzip hat sich ja auch nix geändert...
    Irgendwelche Ideen?

    Code:
    $regfile = "attiny2313.dat"                                 ' specify the used micro
    $crystal = 8000000                                          ' used crystal frequency
    $hwstack = 64
    $swstack = 16
    $framesize = 21
    
    $baud = 9600
    
    Config Kbd = Portb , Debounce = 100 , Rows = 6 , Row5 = Pind.5 , Row6 = Pind.4
    
    Dim Key_scan As Byte
    Dim Togbit As Byte , Address As Byte
    
    Pcmsk = &B00001111                                          'This sets the interrupt mask
    
    On Pcint Matrixinput                                        'On interrupt goto  MATRIXINPUT
    Enable Pcint                                                'Enable interrupts
    Enable Interrupts
    
    Do
       'HIER DER PROGRAMMCODE
    Loop
    
    End
    
    
    Matrixinput:                                                'If we do not disable the interrupts
       Disable Interrupts                                       'GetKBD would generate interrupts
       Waitms 2                                                 'That we cannot use
       Key_scan = Getkbd()                                      'Look in the help file on how to connect the matrix keyboard
       Waitms 2                                                 'Waitms anti bounce
    
       If Key_scan <> 24 Then
          Goto Rc5_senden
          Print "Keynr.: " ; Key_scan ; " received"             '24 is no key pressed, so if 24 do nothing
       End If
    
    Return_from_interrupt:
       Enable Interrupts
    
    Return
    
    
    
    Wait_for_matrix_24:
    'Will wait until no key is pressed before enableing the interrupts
       Key_scan = Getkbd()
       If Key_scan = 24 Then Goto Return_from_interrupt
       Goto Wait_for_matrix_24
    
    
    Rc5_senden:
       Togbit = 0
       Address = 0
       Config Pinb.3 = Output
       Rc5send Togbit , Address , Key_scan

Berechtigungen

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