Forum: Mikrocontroller und Digitale Elektronik STLED316s & Bascom


von Anselm 6. (anselm68)


Lesenswert?

Hiho,

ich habe mal wieder ein Problem....
folgender Code ist als Programmierbeispiel vorhanden
1
ROUTINE NAME : STLED316_Byte_Read
2
INPUT/OUTPUT : Variable Read loaded with the data read from the device
3
4
DESCRIPTION  : Get a data byte from STLED316 (mainly KEy1 and KEY2)
5
6
*****************************************************************************/
7
  
8
STLED316_Byte_Read(void)
9
  {
10
    u8 i;
11
    
12
    PBDDR &= 0x7f;      // Set DIO as input with pull-up
13
    
14
    for (i=0; i<8; i++)
15
      {
16
        CLK_LOW;             // CLK falling
17
        Read  = Read >> 1;   // Shift Read right
18
        Read |= PBDR & 0x80; // write PBDR-b7 to Read
19
        CLK_HIGH;            // CLK rising
20
      }
21
      
22
    PBDDR |= 0x80;      // DIO as output push pull
23
  }
24
25
  *****Aufgerufen von dieser Funktion:
26
27
ROUTINE NAME : STLED316_Keyboard
28
INPUT/OUTPUT : None
29
30
DESCRIPTION  : STLED keyboard scan
31
32
*****************************************************************************/
33
  
34
STLED316_Keyboard(void)
35
  {
36
    u8 i;
37
    u8 Key[2];
38
    
39
    STB_LOW;
40
    STLED316_Byte_Write(0x49);
41
            
42
    STLED316_Byte_Read();
43
    Key[0] = Read;
44
            
45
    STLED316_Byte_Read();
46
    Key[1] = Read;
47
            
48
    STB_HIGH;
49
  }

Nun habe ich dass in Bascom umgesetzt, wobei ich key[0] - Key[1] 
getrennt Anfrage und nicht wie in C nacheinander (Autoincrement off)
1
Declare Sub Key
2
Dim Keydata_1 As Byte
3
Dim Keydata_2 As Byte
4
Const Rd_1 = &B01101001
5
Const Rd_2 = &B01101010
6
7
Sub Key
8
               Dstrb_1 = 0
9
               Displaydata = Rd_1                           'Lesebefehl Key_1
10
               Call Dispout_1
11
               Dstrb_1 = 1
12
13
      Config Pina.3 = Input                                 'pin = Eingang
14
      Porta.3 = 1                                           'pullup ein
15
               Dstrb_1 = 0
16
                  Waitus 10
17
               For I2 = 0 To 7
18
                     Dclk_1 = 0
19
                  Waitus 1
20
                     Keydata_1.i2 = Pina.3
21
                  Waitus 1
22
                     Dclk_1 = 1
23
                  Waitus 1
24
               Next I2
25
               Dstrb_1 = 1
26
27
      Config Pina.3 = Output                                'pin = Ausgang
28
'            --------------------------------------------
29
               Dstrb_1 = 0
30
               Displaydata = Rd_2                           'Lesebefehl Key_2
31
               Call Dispout_1
32
               Dstrb_1 = 1
33
34
      Config Pina.3 = Input                                 'pin = Eingang
35
      Porta.3 = 1                                           'pullup ein
36
               Dstrb_1 = 0
37
               For I2 = 0 To 7
38
                     Dclk_1 = 0
39
                  Waitus 1
40
                     Keydata_2.i2 = Pina.3
41
                  Waitus 1
42
                     Dclk_1 = 1
43
                  Waitus 1
44
               Next I2
45
               Dstrb_1 = 1
46
47
      Config Pina.3 = Output                                'pin = Ausgang
48
49
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..

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.