- Akku Tests und Balkonkraftwerk Speicher         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 26

Thema: Portpins zusammenfügen und 12-bit ausgeben

  1. #11
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Anzeige

    Praxistest und DIY Projekte
    Macht nix

    Du kannst doch ein ganzes byte in den PortC schreiben, auch wenn nur die bits 4-0 von Interesse sind. Die übrigen bits (7-5) hast Du ja ohnehin gelöscht (mit dem AND &B00011111 - Befehl). Und wenn Du ganz sicher gehen willst, kannst Du die Pins C5-C7 ja als Eingänge konfigurieren - dann kommt garantiert nur der relevante Teil vom byte raus (DDRC = &B00011111).

  2. #12
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82
    Stimmt!
    und wie lautet der Befehl für "Ausgabe"?

  3. #13
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Dafür braucht man keinen Befehl (und deshalb gibt´s ihn auch nicht )

    Wenn ein Anschluss als Ausgang konfiguriert ist (DDR-Register), wird das dazugehörige Bit des Port-Registers immer und ohne weiteres Zutun auf den Ausgang gegeben. Das kannst Du für ganze Ports "am Stück" machen, aber auch für jede beliebige Kombination von Bits eines Port-Registers.

    So einfach ist das...

  4. #14
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82
    achsooooo
    dann ist meine Zeile:
    Endhighbyte = Pac
    sogar richtig?? weil Endhighbyte ist ja portA und portC zusammen und Pac ist ja der Umgerechneter Code.
    ich habe das ganze nach gefühl geschrieben, weil ich mit dem Syntax von basic nicht so vertraut bin.
    Was muss ich also in meinem Code oben verändern? ich werde mal bald den Schaltplan zeichnen.

  5. #15
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82
    so, und nun kommt der Schaltplan.. MAN BEACHTE DIE BELEGUNG DES PORTCs
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken sp.jpg  

  6. #16
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    ...mit der Bascom-Syntax vertraut zu sein schadet aber nicht - das macht vieles einfacher!

    Jetzt mal ganz allgemein:

    Du kannst Ports als ganzes ansprechen, z.B.

    PortA = &B10101010 (=binär) oder
    PortA = 170 (=dezimal) oder
    PortA = &HAA (=hexadezimal)

    oder auch über eine Variable, z.B. so

    Dim Zahl as Byte
    Zahl = 170
    PortA = Zahl

    alles das gleiche: Die 8 Pins des PortA werden 10101010 nach außen führen.

    Und wie verschiedene dezimale Zahlen im Binär- oder Hexydezimalsystem aussehen (was uns ja meistens nicht ganz so vertraut ist wie das dezimale), kann man sich mit Hilfe des Rechners im Wndows-Zubehör sehr einfach ansehen. Einfach mal ausprobieren, das schafft schneller Klarheit als hunderte von Seiten zu lesen.

    Du kannst aber auch einzelne bits des Ports setzen:
    PortA.0 = 0
    PortA.1 = 1
    PortA.2 = 0
    ...


    Aber zwei Ports in einem Aufwasch (PortAC oder sowas), das geht nicht. Gar nicht. Niemals. Du musst Deinen Ausgangs-Ports A und C getrennt zuweisen, welche Werte sie haben sollen.

    Für PortA ist das einfach, da er die untern 8 bits Deines 16bit-Words Endhighbyte haben soll. Das geht mit dem Befehl LOW( ). Ich kann die Bascom-Hilfe hierzu nur wärmstens empfehlen, aber es ist wirklich nur dieses hier:

    PortA = LOW(Endhighbyte)

    Fertig.

    Bei PortC wird´s schwieriger, weil die bits "über Kreuz" zugeordnet werden. Da müsstest Du dann in die Trickkiste mit dem Ansprechen bzw. zuweisen einzelner bits greifen:

    PortC.7 = Endhighbyte.8
    PortC.6 = Endhighbyte.9
    PortC.5 = Endhighbyte.10
    PortC.4 = Endhighbyte.11
    PortC.3 = Endhighbyte.12

    Und auch fertig.

    Es gibt 3 gute Methoden, ein "Gefühl" für die Bascom-Syntax zu bekommen:

    1. Probieren, 2. probieren und 3. probieren.

    Der Compiler lässt nur Code durch, der o.k. ist. Und eine wirklich ganz unglaublich gute Hilfe ist die "Help"-Funktion in Bascom, die für jeden, aber auch wirklich jeden Befehl die genaue Syntax beschreibt, und nicht nur das: Für viele Befehle sind sogar auch noch Code-Beispiele dabei, von denen man sich sehr viel abschauen kann. So haben das die meisten hier irgendwann mal gelernt

  7. #17
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82
    hm, sorry das ich so blöd bin.
    habe schon alles auspobiert, was ich probiern könnte.
    nun wolte ich erst nur mit einem PORT (8 bit) machen und schauen, ob es überhaupt funktioniert.
    habe sowas geschrieben:
    Code:
    $regfile = "m32def.dat"
    $crystal = 1000000
    
    Dim Pac As Byte
    
    Portb = Pac
    Do
    Pac = Gray2bin(pac)
    
    Porta = Pac
    
    Wait 1
    Loop
    end
    es funktioniert aber nicht. kommt am PORTA nichts raus.
    Der µC ist ok...
    "PORTA = 3" funktioniert. Gibt er 11000000 raus.
    Wo ist mein Fehler?
    Danke

  8. #18
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Wo ist mein Fehler?
    Wenn Du mit der Zeile

    Portb = Pac

    erreichen möchtest, dass die Variable Pac mit dem Eingangs-Wert gleichgesetzt wird (und davon gehe ich mal aus), stecken drei Fehlerchen drin:

    1. Die Reihenfolge muss andersrum sein: Pac = PortB. Als erstes steht immer die Variable um die es geht, und als zweites der Wert, den diese Variable annehemen soll.
    (Ganz analog zur deutschen Sprache: Fritz = doof weist einer bestimmten Person eine Eigenschaft zu, heißt aber mitnichten, dass alle doofen Menschen Fritz heißen )

    2. Statt PortB musst Du PinB nehmen. Ist etwas verwirrend, aber zu jedem Ein-/Ausgangsbeinchen des Controllers gehören 3 Register:
    -DDRX.Y legt fest, ob´s ein Ein- oder Ausgang sein soll
    -PORTX.Y ist das bit, das ausgegeben wird, wenn der Anschluss als Ausgang konfiguriert ist
    -PINX.Y enthält das bit, das an dem Anschluss anliegt, wenn er als Eingang konfiguriert ist. Eingänge also immer über das PIN-Register abfragen!!!

    Um diese Verwirrung noch zu komplettieren: Auch wenn ein Anschluss als Eingang konfiguriert ist (DDRX.Y = 0), hat das dazugeörige PORT-Bit auch eine Bedeutung: Ist es 1, ist der interne PullUp-Widerstand aktiviert. Das ist wichtig, wenn der Eingang ansonsten "offen" ist.

    3. Die somit korrigierte Zeile

    Pac = PinB

    gehört hinter das "do" - sonst wird sie genau ein einziges mal ausgeführt, und Änderungen an Deinem Eingang werden nicht mehr auf Pac übertragen.

    Alles klar??

  9. #19
    Benutzer Stammmitglied
    Registriert seit
    27.01.2006
    Beiträge
    82
    oh man...
    aber mit dem Code hier
    Code:
    $regfile = "m32def.dat"
    $crystal = 1000000
    
    Dim Pac As Byte
    
    
    Do
    Pac = PinB
    Pac = Gray2bin(pac)
    
    Porta = Pac
    
    Wait 1
    Loop
    End
    lege ich 5V an PB0. Alle anderen Eingänge sind auf LOW-PEGEL.
    Am PORTA gibt er mir aber sowas raus. Pa0 bis Pa7 : 01010101
    warum denn sowas? es sollen doch 10000000 sein.

  10. #20
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Also, erstmal müsste es 00000001 sein, wenn Du PB0 auf 5V legst (die Bits werden immer in der Reihenfolge 7-6-5-4...-0 gezählt). Aber das nur am Rande

    Wie legst Du denn technisch gesehen die Anschlüsse auf +5 bzw. 0 Volt? Hängen die Anschlüsse vielleicht "in der Luft", wenn sie nicht auf +5V sind?

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test