Forum: Mikrocontroller und Digitale Elektronik variabler Port in Bascom


von Fetti (Gast)


Lesenswert?

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?

von Kurz (Gast)


Lesenswert?

Nein.

von Paul B. (paul_baumann)


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

von Thomas D. (thomasderbastler)


Lesenswert?

was sagt der Compiler ?

von Paul B. (paul_baumann)


Lesenswert?

Thomas der Bastler schrieb:
> was sagt der Compiler ?

Was soll der sagen? Nichts -denn es ist ja syntaktisch richtig.
´Wenn Du nicht so bequem wärest, hättest Du das selbst ausprobieren
können!

Paul

von Fetti (Gast)


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

von Paul B. (paul_baumann)


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

von Fetti (Gast)


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

von Paul B. (paul_baumann)


Lesenswert?

Fetti schrieb:
> Verstehe nicht, wie ich die Alfreds in meine Columns integrieren soll.

Das war nur ein Beispiel, weil nicht genau erkennbar war, wie es werden
sollte.

Das muß mit in die Schleife rein, nicht oben bei der Initialisierung:
Porta.0 = Portd.7

Probier das aml aus.

mfG Paul

von Detlef K. (deka65)


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

von Detlef K. (deka65)


Lesenswert?

Da war wieder einer schneller ;)

deka65

von Fetti (Gast)


Lesenswert?

Dann kommt ein storebit error. Irgendwie scheint die Verknüpfung 
zwischen a.0 und den Columns noch zu fehlen. Kann man das alias der 
Columns noch irgendwie ausweiten?

von Detlef K. (deka65)


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

von Fetti (Gast)


Lesenswert?

Bist mein persönlicher Held, es funktioniert!
Grazie

von MWS (Gast)


Lesenswert?

Detlef Kahrmann schrieb:
>        Temp=Temp + 1
>        if Temp < 8 Then
>        portA.0=0
>        endif
>
>        Case = 1
>         .
>         .
>         .
>        case = 8

Warum so kompliziert? Im Case 8 setzt man PA0 und in Case 1 wieder 
zurück.

von Detlef K. (deka65)


Lesenswert?

Hallo,

MWS schrieb:
> Warum so kompliziert? Im Case 8 setzt man PA0 und in Case 1 wieder
> zurück.

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

hast aber Recht ,das ist dann finetuning.

deka65

von Fetti (Gast)


Lesenswert?

Jo, klappt beides. Beides hat leider auch geringfüfige Verzerrungen bei 
Laufschriften zur Folge. Liegt das an der unterschiedl. Beschaffenheit 
der Ausgänge?

von MWS (Gast)


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.

von MWS (Gast)


Lesenswert?

Fetti schrieb:
> Jo, klappt beides. Beides hat leider auch geringfüfige
> Verzerrungen bei
> Laufschriften zur Folge. Liegt das an der unterschiedl. Beschaffenheit
> der Ausgänge?

Du musst in Case 8 die Cols auf 0 setzen, das ist Dir schon klar?

von Fetti (Gast)


Lesenswert?

Jau, das wars. Danke an die ganze -mannschaft.

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.