mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STLED316s & Bascom


Autor: Anselm 68 (anselm68)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hiho,

ich habe mal wieder ein Problem....
folgender Code ist als Programmierbeispiel vorhanden
ROUTINE NAME : STLED316_Byte_Read
INPUT/OUTPUT : Variable Read loaded with the data read from the device

DESCRIPTION  : Get a data byte from STLED316 (mainly KEy1 and KEY2)

*****************************************************************************/
  
STLED316_Byte_Read(void)
  {
    u8 i;
    
    PBDDR &= 0x7f;      // Set DIO as input with pull-up
    
    for (i=0; i<8; i++)
      {
        CLK_LOW;             // CLK falling
        Read  = Read >> 1;   // Shift Read right
        Read |= PBDR & 0x80; // write PBDR-b7 to Read
        CLK_HIGH;            // CLK rising
      }
      
    PBDDR |= 0x80;      // DIO as output push pull
  }

  *****Aufgerufen von dieser Funktion:

ROUTINE NAME : STLED316_Keyboard
INPUT/OUTPUT : None

DESCRIPTION  : STLED keyboard scan

*****************************************************************************/
  
STLED316_Keyboard(void)
  {
    u8 i;
    u8 Key[2];
    
    STB_LOW;
    STLED316_Byte_Write(0x49);
            
    STLED316_Byte_Read();
    Key[0] = Read;
            
    STLED316_Byte_Read();
    Key[1] = Read;
            
    STB_HIGH;
  }
 

Nun habe ich dass in Bascom umgesetzt, wobei ich key[0] - Key[1] 
getrennt Anfrage und nicht wie in C nacheinander (Autoincrement off)
Declare Sub Key
Dim Keydata_1 As Byte
Dim Keydata_2 As Byte
Const Rd_1 = &B01101001
Const Rd_2 = &B01101010

Sub Key
               Dstrb_1 = 0
               Displaydata = Rd_1                           'Lesebefehl Key_1
               Call Dispout_1
               Dstrb_1 = 1

      Config Pina.3 = Input                                 'pin = Eingang
      Porta.3 = 1                                           'pullup ein
               Dstrb_1 = 0
                  Waitus 10
               For I2 = 0 To 7
                     Dclk_1 = 0
                  Waitus 1
                     Keydata_1.i2 = Pina.3
                  Waitus 1
                     Dclk_1 = 1
                  Waitus 1
               Next I2
               Dstrb_1 = 1

      Config Pina.3 = Output                                'pin = Ausgang
'            --------------------------------------------
               Dstrb_1 = 0
               Displaydata = Rd_2                           'Lesebefehl Key_2
               Call Dispout_1
               Dstrb_1 = 1

      Config Pina.3 = Input                                 'pin = Eingang
      Porta.3 = 1                                           'pullup ein
               Dstrb_1 = 0
               For I2 = 0 To 7
                     Dclk_1 = 0
                  Waitus 1
                     Keydata_2.i2 = Pina.3
                  Waitus 1
                     Dclk_1 = 1
                  Waitus 1
               Next I2
               Dstrb_1 = 1

      Config Pina.3 = Output                                'pin = Ausgang

End Sub Key
Hier bekomme ich immer den Wert 255 in der Keydata_x zurückgeliefert.

Dass Datenblatt ist unter 
http://www.st.com/stonline/products/literature/ds/14307.pdf zu finden.
Wobei mir hier auffällt dass unter Punkt 11.3 (Anschlusschema) die 
Dioden zur Keymatrix mit den Anoden an Seg.x hängen.
Dies irritiert mich ein wenig wo doch Common Anode Anzeigen verbaut 
werden...


any hints?

Gruß Anselm

p.S.: Die Zeile "call Dispout_1" funktioniert einwandfrei, hier steuer 
ich 2x3 7-Segment mit.
Dispout_1 macht dass Bitgewackel um die Daten rauszuschieben..

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.