-         

Ergebnis 1 bis 4 von 4

Thema: ERLEDIGT:Atmega644 und MCP23S17

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    04.12.2006
    Beiträge
    26

    ERLEDIGT:Atmega644 und MCP23S17

    Anzeige

    Ich bekomme einfach keine Signale vom Portexpander. Raus gar kein Problem. Irgendwie erschließt sich mir die Logik des Registerwarterloo nicht ganz so. Können die nicht einen Kippschalter oben an des DIP gehäuse dranmachen. Da würde ich mir das schreiben von endlosen Registern sparen. Kleiner Witz.

    Also wer von Euch Spitzenkräften kann mir bei meinem Problem helfen?

    Nich alle auf einmal

    Hier erstmal der Code. (Ist das Bascom Beispielprogramm ein wenig in die länge gezogen. Ich teste erst alle Einzelschnittstellen bevor ich den Hauptcode schreibe.)

    Code:
    Dim B As Word
    Dim A(10) As Byte
    Config Pinb.0 = Output
    Config Pinb.1 = Output
    Config Pinb.5 = Output
    Config Pinb.6 = Input
    Config Pinb.7 = Output
    
    Open "com1:" For Binary As #1
    Spiinit
    
    ' MCP23S17 Register  RO=ReadOnly
    ' Adresse 00 01  IODIR   Richtung Port a/b 0=Output 1=Input
    ' Adresse 02 03  IPOL    Polarität 1=umgekehrt
    ' Adresse 04 05  GPINTEN Interrupt aktivieren 1=an 0=aus
    ' Adresse 06 07  DEFVAL  Vergleichsregister für Interrupt
    ' Adresse 08 09  INTCON  1=PIN<->DEFVAL 0=PIN neu <->PIN alt
    ' Adresse 0A 0B  IOCON   Configuration
    ' Adresse 0C 0D  GPPU    PullUp 1=aktiv 0= aus
    ' Adresse 0E 0F  INRF    Interrupt Flag register RO
    ' Adresse 10 11  INTCAP  Interrupt Capture Register RO
    ' Adresse 12 13  GPIO    Port Werte RW
    ' Adresse 14 14  OLAT    Output Latch Register
    
    ' Ausgabe klappt wie Teufel
    Portb.0 = 0                         'Reset
    Waitus 100
    Portb.0 = 1
    
    A(1) = &B01000000                                           'Richtung Porta
    A(2) = $00
    A(3) = $0
    A(4) = $00
    Spiout A(1) , 4
    A(1) = &B01000000                                           'PullUp
    A(2) = $0c
    A(3) = $00
    A(4) = $00
    
    For B = 0 To &B1111111111111111
    A(1) = &B01000000                                           'Ausgänge ansteuern
    A(2) = $12
    A(3) = High(b)                                              ' Port A gleich MSB von B
    A(4) = Low(b)
                                                    ' Port B gleich LSB von B
    Spiout A(1) , 4
    Next B
    
    
    Portb.0 = 0                                 'Reset
    Waitus 100
    Portb.0 = 1
    
    
    
    
    
    'Ab hier still ruht der See!!
    Test:
    A(1) = &B01000000                                           'Richtung Porta
    A(2) = $00
    A(3) = $ff
    A(4) = $ff
    Spiout A(1) , 4
    A(1) = &B01000000                                           'Polarität umkehren
    A(2) = $02
    A(3) = $ff
    A(4) = $ff
    Spiout A(1) , 4
    A(1) = &B01000000                                           'PullUp
    A(2) = $0c
    A(3) = $ff
    A(4) = $ff
    Spiout A(1) , 4
    A(1) = &B01000001                                           'Ausgang PORTA/B lesen
    A(2) = $12
    Spiout A(1) , 2
    Spiin A(1) , 2
    
    Print #1 , A(1) ; A(2)
    
    Goto Test
    Waitus 100
    End
    Danke für Eure Hilfe. Kommentieren ist nicht so meine stärke bin eher Küchenprogrammierer. Erst den Code haben dann strukturieren, da bekommt jeder Informatiker einen Mittelschweren Ausraster.

    Gruß,

    Stephan

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    04.12.2006
    Beiträge
    26
    Hallo Leute,

    ich nehme an, dass der von mir verwendete Portexpander wohl eher ein Nischenprodukt ist.

    Ich bekomme es irgendwie nicht auf die Kette, die Portereignisse zu empfangen. Da hampel ich seit Samstag mit rum.

    Nach meiner Meinung Schreibe ich per SPI die Daten in den Expander mit dem Readbit und lese direkt danach die angeforderten Daten aus! Ab dem Auslesen werden vom MCP23S17 auch Daten gesendet, nur mein Atmega will davon nix wissen.
    Ich habe die Sendbytes geändert Pausen von µ bis m Sekunden eingefügt. Mehrer Byte ausgelesen. Verwende ich die gleiche Schaltung und hänge eine SD Karte dran und nehme die MMC Lib, no Problem. Also kommt über die Ports auch alles rein.

    Leider ist in der PDF von Microchip nur der Befehlablauf per I²C erklärt und da wird mit Ack zwischen den Befehlen gearbeitet. Ob der Portexpander jedoch ein Dummybyte benötigt ?????

    Wenn ich denn SPI Eingang am ATMEGA auf HIGH legen werden auch schön 255 pro Abfrage angezeigt. Also ist das Problem ein Softwareseitiges.

    Ich bekomme langsam eine Krise, da ich einfach nicht weiter komme.

    Und das mit den Spitzenkräften war ernst gemeint. Ich ziehe wirklich meinen Hut vor so mancher innovativen Idee hier im Forum.

    Gruß,

    Stephan

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    04.12.2006
    Beiträge
    26
    Sieht ein wenig schizophren aus, aber ich lerner ja täglich dazu.

    Dank meiner Firma habe ich ein trag. Ozilloskop immer zur Hand. (hät ich mal schon am Samstag zur Hand nehmen sollen.)

    Nun ist der Signalverlauf so:

    Ich schreibe laut Manual für den MCP23S17 2 byte und lese das dritte Byte aus. Nur leider mit dem kleinen Problem, das Bascom den CS dazwischen auf LOW legt, damit ist für den Portexpander wieder alles beim alten.

    Schreibe ich 3 Byte kommt über die SO Leitung auch mein gewünschtes Signal. (je nach GND geschalteten Input die ensprechenden Signal. Ja super nur mit einem folgenden SPIIN ist der Zug wieder abgefahren.

    Ich denke ich nutze die SPI Routine von Bascom schalten den CS jedoch über einen separaten Port.

    Ich werde berichten ob es funktioniert.

    Wenn der Portexpander läuft ist es ein geiles Teil, da relativ easy zu nutzen.

    a.) Saubillig bei Farnell 1,55€ ab 10 Stüch 0,99€
    b.) 16 bit oder 2 x 8 bit nach eigenem Gusto konfigurierbar
    c.) 2 getrennte Interrupt Ausgänge. Per Steuerregiste konfigurierbar. ( Interrupt bei Wertänderung zum letzten Wert oder Wertänderung zum hinterlegten Referenzwert)
    d.) Beschaltung recht einfach.
    e.) Per Register zuschaltbare PULLUP's
    f.) 25mA pro Ausgang
    g.) Adressierbar 3 Adressbit, demnach bis zu 8 Portexpander a 16 BIT möglich (denk nach ach ja = 12

    Wenn das Sch**ding jetzt noch läuft tanz ich erstmal einen Lambada.

    Auch wenn es mittlerweile wie ein Selbstgespräch aussieht, ich bin immer noch auf der Suche mit den reinen Bascom mitteln das Teil anzusteuern.


    Gruß, Stephan

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    04.12.2006
    Beiträge
    26

    LEUTE DAS WAR ES

    Ich hab's, es liegt wirklich am CS Signal.

    Wenn ich den Portexpander per sep. CS Leitung vor und nach aktivieres funktioniert es. Bascom erzeugt ja logischerweise zwischen den Befehlen einen neuen CS.

    Ein ein Codeausschnitt:
    Code:
    Portb.0 = 0
    Waitms 100
    Portb.0 = 1
    
    A(1) = &B01000000                                           'Beide Ports auf Eingang
    A(2) = $00
    A(3) = $ff
    A(4) = $ff
    Cs = 0                                                      'ChipSelect auf low
    
    Spiout A(1) , 4
    Cs = 1
    
    A(1) = &B01000000                                           'PullUp aktiviert
    A(2) = $0c
    A(3) = $ff
    A(4) = $ff
    Cs = 0
    Spiout A(1) , 4
        Cs = 1
    
    Test:
    
    
    A(1) = &B01000001                                           'Ausgang PORTA/B lesen
    A(2) = $12
    
    
    Cs = 0
    Spiout A(1) , 2
    
    Spiin A(1) , 2
    Cs = 1
    Porta = A(1)
    Portd = A(2)
    
    Goto Test
    Ich gehe mal eben Lambada tanzen.

    Gruß,

    Stephan

Berechtigungen

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