Beiträge von BehindBlueEyes

    Hallo EmittingFuture,
    kannst du die 66 Reihen nicht im Multiplex Verfahren ansteuern? Also mit 6x11 wären das nur 17 Anschlüsse, die ein Mega16 leicht hat.
    Vom Programm noch viel einfacher würde es, wenn du auf 64 reduzierst, weil du dann in 8x8 aufteilen könntest.
    Du hättest dann praktisch eine Matrix, die du dann über einen Timer ansteuerst. Immer eine ganze Zeile an und die Spaltenwerte dann auf einmal ausgegeben.
    Dadurch reduziert sich zwar die Helligkeit, weil jede Zeile nur 1/6 bzw. 1/8 der Zeit an ist. Das kannst du aber über höhere Ströme wieder ausgleichen.


    BEye

    Mega
    103
    128
    16
    161
    162
    163
    164P
    165 (dann aber nur internen RC)
    168 (dann aber nur internen RC)
    169 (dann aber nur internen RC)
    2560
    2561
    32
    323
    324
    325 (dann aber nur internen RC)
    329 (dann aber nur internen RC)
    48 (dann aber nur internen RC)
    603 (dann aber nur internen RC)
    64
    640
    644P
    645 (dann aber nur internen RC)
    649 (dann aber nur internen RC)
    8 (dann aber nur internen RC)
    8535
    88 (dann aber nur internen RC)
    Keiner der Tinys


    Habe ich einen übersehen? Keine Ahnung!


    BEye

    Hallo yeehaw,
    wenn du das mit Waits machst, kannst du ja sonst nichts anderes mehr tun.
    Daher sind solche Matrix-Anwendungen mit einem Timer sinnvoller.
    Probier es doch mal so:


    Ist jetzt nicht getestet, da ich keine Hardware habe.
    Wie du siehst, ist die Do...Loop vollkommen leer. Hier kannst du beliebigen Code einfügen, z.B. um nicht immer alle PortB Ausgänge eingeschaltet zu haben.


    BEye

    Dim Signal As Word = Out of SRAM space, in file G:\ ...


    Pulsein Signal , Pinb , 0 , 1 = Assignment error [SIGNAL: 0 __WTMPC: 36] , in file G:\


    und LOOP expected , in File :

    Der Tiny13 hat nur 64 Byte SRAM.
    Schau mal unter Options->Compiler->Chip. Dort sind Werte für HW Stack, Soft Stack und Framesize eingetragen. Die sind zusammen wohl schon größer als 64. Die Summe muss kleiner 63 sein, damit du deine Word Variable noch hinzufügen kannst.
    Alternativ kannst du im Code auch
    $TINY
    angeben, dann werden die Stacks nicht benutzt.
    Der Rest sind bestimmt Folgefehler.


    BEye

    Einfachste Methode wäre einfach die 8Bit * 16 zu nehmen, so bekommt man maximal 4080 raus, also nicht ganz ausgefüllte 12 Bit.


    8bit sind 256 verschiedene Werte, inklusive der 0. *16 ergibt sich natürlich genau 4096, also volle 12bit.
    Multiplizieren ist tatsächlich nicht so schlimm. Da du aber mit einer 2er-Potenz multiplizierst, könntest du den Wert auch shiften. In Bascom wäre das
    Shift dein_wert, Left, 4


    Bei meinen Anwendungen war aber ein 8-bit Farbwert immer RRRGGGBB, ein 12-bit Wert RRRRGGGGBBBB.
    Den kannst du ja so nicht als Ganzes multiplizieren, sondern müsstest immer nur den entsprechenden Farbteil nehmen.

    Zitat

    Eine andere Methode wäre eine Lookuptabelle mit 256 Werten zu nehmen die dann einen 12 Bit Wert raus gibt.
    Hier könnte man dann auch gleich eine LED Korrekturkurve einbringen.


    Dies sehe ich auch so. Aber hier müsstest du 16 bit (Word) nehmen. Dies würde also insgesamt 512 Byte belegen.


    BEye

    Dann leg die Adressen doch wie oben schon vorgeschlagen in einem Byte-Array oder im EEPROM hintereinander ab.
    Mit jeder Schleife erhöhst du dann den Pointer ins Array um 8 und kommst so an die Adresse des nächsten Sensors.


    So dramatisch finde ich das jetzt nicht.


    BEye

    Ich hatte an sowas gedacht:
    Sub 1wire_scan()
    'scans the bus for devices
    'out: count
    ' id()
    1wreset
    Count = 1wirecount()
    Temp_id(1) = 1wsearchfirst()
    Gosub Read_DS1820


    For Device = 2 To Count
    Temp_id(1) = 1wsearchnext()
    Gosub Read_DS1820
    Next Device
    End Sub


    Schon klar, dass du mit temp_id(i) auf den temporären Charakter hinweisen willst. Daher könntest du nach der Zuweisung sofort die Daten auslesen.

    Hallo,
    deinen seltsamen String


    Dim Id(16) As String * 16


    hatte ich ganz übersehen. Ich dachte, den wolltest du nur für die Ausgabe verwenden.
    Außerdem brauchst du den auch gar nicht für das 1wverify, da die ID ja in


    Dim Temp_ID(8) as Byte
    Temp_id(1) = 1wsearchfirst()


    abgelegt ist.
    Mehere IDs kannst du hintereinander in ein Array legen oder dir z.B. im Eeprom abspeichern und bei Bedarf wieder auslesen.
    Mehrdimensionale Array gehen in Bascom so nicht, kannst du aber durch ein eindimensionales abbilden.
    Dein ID(16) mit jeweils 16 Charactern ist übrigens so etwas wie ein 2-dimensionales Array.


    BEye

    Schau mal hier www.ibutton.com/ibuttons/standard.pdf, Seite 51 Abschnitt C3. Dort ist beschrieben, in welcher Reihenfolge sich die Sensoren melden. Ist nicht immer einfach aufsteigend.


    Gezielt auslesen geht entweder so:
    1wreset
    1wwrite &H55 ' match rom command
    1wwrite sensor(1) , 8 ' 8Byte ID von sensor 1
    1wwrite &HBE ' Read Scratchpad command
    Daten(1) = 1wread(9) ' bis zu 9 Byte auslesen


    oder so:
    1wreset
    1wverify sensor(1)
    1wwrite &HBE
    Daten(1) = 1wread(9)