variabler Port in Bascom

#3856291
Lesenswert?

Fetti schrieb:
> Ist es möglich unter Bascom einen 2313 dem A.1 einen virtuellen D.7
> zuzuweisen um ihn gemeinsam mit den anderen D´s anzusprechen?

Ich weiß nicht, ob ich es richtig verstanden habe. Als Beispiel habe ich
ein Variable namens "Alfred" vom Typ Byte angelegt. Darin kann ich jedes
Bit einzeln dem Inhalt des Port B zuweisen. Ich habe auch noch eine
Bitvariable namens "D7" erstellt und der den Wert von PortB.3 
zugewiesen.
Das geht tadellos.

Ich benutze das, um mir aus diversen Variablen einzelne Bits zu holen 
und
sie dann neu zusammenzusetzen. Das erspart mir einen Haufen Ver-Undungen
oder Ver-Oderungen.



$regfile = "m8def.dat"                  'ATmega8
$crystal = 8000000 $                    '8 MHz
$hwstack = 40
$swstack = 40
$framesize = 40
$baud = 19200


Dim Alfred As Byte
Dim D7 As Bit


Config Portb = Output

Alfred.0 = Portb.0
Alfred.1 = Portb.1
Alfred.2 = Portb.2
D7 = Portb.3
Gast #3856330
Lesenswert?

Mein Probblem ist folgendes:
Habe folgendes vom 8515 portiert, eine dot matrix.
funktioniert super, nur den A.1 kriege ich nicht integriert, wobei er 
separat angesprochen (sprich columns über porta) durchaus funktioniert.
Daher schwebte mir etwas wie portd.7 alias porta.1 vor.
läßt sich compilieren, hat aber keinen effekt.

'----------------------------------------------------------------------- 
------------------
'copyright                : (c) 2008-2007, AVRprojects.info
'purpose                  : Dot Matrix
'----------------------------------------------------------------------- 
------------------

$regfile = "attiny2313.dat"                                 ' specify 
the used micro
$crystal = 8000000                                          ' used 
crystal frequency
Declare Sub Load_data
Declare Sub Swift_data

   Rows Alias Portb
   Cols Alias Portd

   Config Rows = Output

   Config Cols = Output
   Config Timer0 = Timer , Prescale = 8

   Dim A As Integer
   Dim Temp As Byte
   Temp = 0
   Dim Tdata1 As Byte
   Dim Tdata2 As Byte
   Dim Tdata3 As Byte
   Dim Tdata4 As Byte
   Dim Tdata5 As Byte
   Dim Tdata6 As Byte
   Dim Tdata7 As Byte
   Dim Tdata8 As Byte


   On Timer0 Disps:
   Enable Interrupts
   Enable Timer0
Do
   Restore Happy
   Load_data
   Waitms 300
   Restore Happy2
   Load_data
   Waitms 100
   Restore Happy3
   Load_data
   Waitms 100
   Restore Happy2
   Load_data
   Waitms 300

 Restore Moshpit
 Load_data
  For A = 1 To 64
    Swift_data
    Waitms 300
   Next

   Loop
Disps:
    Temp = Temp + 1

    Select Case Temp
      Case 1 :
         Rows = Tdata1
         Cols =  &H01
      Case 2 :
         Rows = Tdata2
         Cols = &H02
      Case 3 :
         Rows = Tdata3
         Cols = &H04
      Case 4 :
         Rows = Tdata4
         Cols = &H08
      Case 5 :
         Rows = Tdata5
         Cols = &H10
      Case 6 :
         Rows = Tdata6
         Cols = &H20
      Case 7 :
         Rows = Tdata7
         Cols = &H40
      Case 8 :
         Rows = Tdata8
         Cols = &H80
         Temp = 0
    End Select
Return

Sub Load_data()
   Read Tdata1
   Read Tdata2
   Read Tdata3
   Read Tdata4
   Read Tdata5
   Read Tdata6
   Read Tdata7
   Read Tdata8
End Sub

Sub Swift_data()
   Tdata1 = Tdata2
   Tdata2 = Tdata3
   Tdata3 = Tdata4
   Tdata4 = Tdata5
   Tdata5 = Tdata6
   Tdata6 = Tdata7
   Tdata7 = Tdata8
   Read Tdata8
End Sub

End

Happy:
Data &B10100000 , &B01010000 , &B00101100 , &B11010010 , &B00010010 , 
&B00001100 , &B00000001 , &B00000000 , &B00000000 ,

Happy2:
Data &B10100000 , &B01010110 , &B00101001 , &B11001001 , &B00000110 , 
&B00000010 , &B00000001 , &B00000000 , &B00000000 ,

Happy3:
Data &B10100000 , &B01010000 , &B00100000 , &B11011000 , &B00100100 , 
&B00100100 , &B00011001 , &B00000000 , &B00000000 ,

Moshpit:
 Data &B11111111 , &B11111111 , &B00000111 , &B00001110 , &B00001110 , 
&B00000111 , &B11111111 , &B11111111 , &B00000000
 Data &B00111100 , &B01111110 , &B11100111 , &B11000011 , &B11000011 , 
&B11100111 , &B01111110 , &B00111100 , &B00000000
 Data &B11001110 , &B11011111 , &B11011011 , &B11011011 , &B11011011 , 
&B11011011 , &B11111011 , &B01110011 , &B00000000
  Data &B11111111 , &B11111111 , &B00011000 , &B00011000 , &B00011000 , 
&B00011000 , &B11111111 , &B11111111 , &B00000000
  Data &B11111111 , &B11111111 , &B00011011 , &B00011011 , &B00011011 , 
&B00011011 , &B00011111 , &B00001110 , &B00000000
  Data &B11000011 , &B11000011 , &B11000011 , &B11111111 , &B11111111 , 
&B11000011 , &B11000011 , &B11000011 , &B00000000
   Data &B00000011 , &B00000011 , &B00000011 , &B11111111 , &B11111111 , 
&B00000011 , &B00000011 , &B00000011 , &B00000000
   DATA &B00000000, &B00000000, &B00000000, &B00000000, &B00000000, 
&B00000000, &B00000000, &B00000000, &B00000000
#3856345
Lesenswert?

Port A.1 ist doch der Quarzanschluß. Hast Du da einen Quarz dran, oder
ist der frei?

Wenn er frei ist, dann mußt Du nur den PortA.1 als Output deklarieren:
Config PortA.1 = Output

Und dann noch PortD.7 (der ja leider nicht nach draußen gelangt)
auf PortA.1 rausjagen:

PortA.1 = PortD.7

Kompilieren läßt sich das:


$regfile = "attiny2313.dat"
$crystal = 8000000 $                    '8 MHz
$hwstack = 40
$swstack = 40
$framesize = 40
$baud = 19200


Dim Alfred As Byte
Dim D7 As Bit


Config Portb = Output
Config Portd = Output
Config Porta.1 = Output

Alfred.0 = Portb.0
Alfred.1 = Portb.1
Alfred.2 = Portb.2
D7 = Portb.3
Porta.1 = Portd.7


Ich kann es nicht in Natura ausprobieren, weil ich nicht da bin, wo das
freundliche Steckbrett ist, bin aber sicher, das schon so gemacht zu 
haben.

mfG Paul
Gast #3856373
Lesenswert?

Hab klar keinen Quarz dran, hab es jetzt folgendermaßen (ohne Effekt)
Porta.0 ist der betreffende, mein Fehler
Verstehe nicht, wie ich die Alfreds in meine Columns integrieren soll.


 Rows Alias Portb
   Cols Alias Portd

   Config Rows = Output
   Config Porta.0 = Output
   Config Cols = Output
   Config Timer0 = Timer , Prescale = 8
   Porta.0 = Portd.7

   Dim A As Integer
   Dim Temp As Byte
   Temp = 0
   Dim Tdata1 As Byte
   Dim Tdata2 As Byte
   Dim Tdata3 As Byte
   Dim Tdata4 As Byte
   Dim Tdata5 As Byte
   Dim Tdata6 As Byte
   Dim Tdata7 As Byte
   Dim Tdata8 As Byte
#3856427
Lesenswert?

Hallo,

Fetti schrieb:
> Disps:
>     Temp = Temp + 1
>
>     Select Case Temp
>       Case 1 :
>          Rows = Tdata1
>          Cols =  &H01
>       Case 2 :
>          Rows = Tdata2
>          Cols = &H02
>       Case 3 :
>          Rows = Tdata3
>          Cols = &H04
>       Case 4 :
>          Rows = Tdata4
>          Cols = &H08
>       Case 5 :
>          Rows = Tdata5
>          Cols = &H10
>       Case 6 :
>          Rows = Tdata6
>          Cols = &H20
>       Case 7 :
>          Rows = Tdata7
>          Cols = &H40
>       Case 8 :
>          Rows = Tdata8
>          Cols = &H80
>          Temp = 0
>     End Select
> Return

Cols gibt ja nur Daten an PortD aus (Cols alias PortD).
Ändere mal die Timer0 ISR
  Case 8 :
      Rows=Tdata8
      PortA.0=&H01
      Temp=0
  End select

Da in Cols bei &H80 ja nur das 7. Bit gesetzt ist, weist du das jetzt
dem Pin PA.0 zu.

"Versuch macht kluch" !

deka65
#3856492
Lesenswert?

Hallo,
Sorry :((
Pin A.0 kann ja nur ein Bit sein. Also PortA.0=1
Da aber beim nächsten Interrupt der Pin wieder 0 sein
muß, ist es besser eine If - Then Anweisung zu machen.
Beisp.
       Temp=Temp + 1
       if Temp < 8 Then
       portA.0=0
       endif

       Case = 1
        .
        .
        .
       case = 8

"Versuch macht kluch " !

deka65
Gast #3856524
Lesenswert?

Detlef Kahrmann schrieb:
> und warum fällt dir das erst jetzt ein ?
> das hättest du auch 4 Beiträge vorher schreiben können.

Das liegt daran, dass ich nicht wie Schnappi hier sitze, um neue Threads 
umgehend zu beantworten.

Ich würd's auch nicht als Feintuning bezeichnen, in diesem Fall einfach 
als logische Konsequenz, um nicht überflüssigen Code zu erzeugen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren