mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MAX7300


Autor: Florian Venzke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich versuche erfolglos den MAX7300 zu benutzen.
Die I2C-Routinen scheinen zu funktionieren (Acknowledge-Bit wird
gelöscht).

Ich möchte z.B. Port 12 als Ausgang benutzen. Also habe ich folgende
Bytes gesendet: 0x0B (Register) 0x55 (alle als Ausgang).
Ist das bisher richtig?
Wie spreche ich dann z.B. Port 12 einzeln an, und setze diesen
high/low?

Bisher messe ich an Port 12 immer irgendwas (~300mV).

Gruß
Florian

Autor: Rockhound (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Florian,

die Portkonfiguration ist richtig.
Port 12 wird über Register 0x2C geschaltet.
Für Pegel High sende 0x2C, 0x01 (Port, Data) und
für Pegel Low sende 0x2C, 0x00.
Funktioniert bei mir problemlos.

Gruß Rockhound

Autor: Florian Venzke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin langsam am verzweifeln. Egal was ich mache - es geht nicht.

Den Max7300 habe ich wie folgt beschaltet:
Pin1: über 42k an Masse
Pin2+3 : Masse
Pin4: Masse
Pin5: getesteter Ausgang
Pin25: SDA
Pin26: SCL
Pin27: V+
Pin28: V+

Mein Code:
.include "8535def.inc"

.def temp = r16
.def data = r17

.def eeph = r18        ; Zähler des EEPROMs
.def eepl = r19

.org 0x000
    rjmp main        ; Reset Handler
    reti          ; IRQ0 Handler
    reti          ; IRQ1 Handler
    reti          ; Timer2 compare Handler
    reti          ; Timer2 overflow Handler
    reti          ; Timer1 Capture Handler
    reti          ; Timer1 compareA Handler
    reti          ; Timer1 compareB Handler
    reti          ; Timer1 Overflow Handler
    reti          ; Timer0 Overflow Handler
    reti          ; SPI Transfer Complete Handler
    reti          ; UART RX Complete Handler
    reti          ; UDR Empty Handler
    reti          ; UART TX Complete Handler
    reti          ; ADC Conversion Complete Interrupt Handler
    reti          ; EEPROM Ready Handler
    reti          ; Analog Comparator Handler

read:
    OUT   EEARL,eepl     ; im EEPROM an den EEPROM-Port
    OUT   EEARH,eeph     ; übergeben, da 512 Byte verfügbar
    SBI   EECR, 0       ; Setze des Read-Enable-Bit EERE im
                     ; EEPROM-Control-Register EECR
     IN   data,EEDR       ; Lese das Byte aus dem EEPROM-Speicher
    inc  eepl
read_wait:
    sbic EECR, 0
    rjmp read_wait
    ret

main:
    ldi eeph, HIGH(daten)
    ldi eepl, LOW(daten)

    ldi temp, LOW(RAMEND)  ; LOW-Byte der obersten RAM-Adresse
    out SPL, temp
    ldi temp, HIGH(RAMEND)  ; HIGH-Byte der obersten RAM-Adresse
    out SPH, temp

    ldi temp, 0xFF      ; PortC als Ausgang festlegen
    out DDRC, temp
                ; PORTC, 0 SCL
                ; PORTC, 1 SDA

    ldi temp, 0xFF
    out PORTC, temp

    rcall send
    rcall send

    rjmp loop

loop:
    rjmp loop

wait:
    ldi temp, 0x00
    out TCNT0, temp
    ldi temp, 0b00000010
    out TCCR0, temp
wait_:  in temp, TCNT0
    cpi temp, 8
    brlo wait_
    ldi temp, 0x00
    out TCCR0, temp
    ret

send:
    rcall start
    rcall read
    rcall sendbyte
    rcall read
    rcall sendbyte
    rcall read
    rcall sendbyte
    rcall stop
    ret

start:
    rcall wait        ; t_buf abwarten
    rcall wait
    cbi PORTC, 1      ; SDA löschen, während SCL high
    rcall wait
    cbi PORTC, 0
    rcall wait
    ret

stop:
    cbi PORTC, 1
    rcall wait        ; 1/2 t_low abwarten
    sbi PORTC, 0
    rcall wait
    sbi PORTC, 1      ; SDA setzen, während SCL high
    ret

sendbyte:
    sbrc data, 7
    rcall send1
    sbrs data, 7
    rcall send0

    sbrc data, 6
    rcall send1
    sbrs data, 6
    rcall send0

    sbrc data, 5
    rcall send1
    sbrs data, 5
    rcall send0

    sbrc data, 4
    rcall send1
    sbrs data, 4
    rcall send0

    sbrc data, 3
    rcall send1
    sbrs data, 3
    rcall send0

    sbrc data, 2
    rcall send1
    sbrs data, 2
    rcall send0

    sbrc data, 1
    rcall send1
    sbrs data, 1
    rcall send0

    sbrc data, 0
    rcall send1
    sbrs data, 0
    rcall send0

    rcall ackn

    ret

send1:
    sbi PORTC, 1
    rcall wait
    sbi PORTC, 0
    rcall wait
    cbi PORTC, 0
    rcall wait
    cbi PORTC, 1
    ret

send0:
    rcall wait
    sbi PORTC, 0
    rcall wait
    cbi PORTC, 0
    rcall wait
    ret

ackn:
    rcall wait
    sbi PORTC, 1
    cbi DDRC, 1
    sbi PORTC, 0
    rcall wait
    sbis PINC, 1               ; wenn Datenbit von Empfänger gelöscht,
        cbi PORTC, 2               ; LED an
    cbi PORTC, 0
    sbi DDRC, 1
    rcall wait
    ret

.eseg
daten:
.db 0b10001000, 0x0B, 0x55, 0b10001000, 0x2C, 0x01 ;(oder 0x00)


Am Ausgang Pin5 messe ich nichts vernünftiges (egal ob Pin high oder
low gesetzt)

Autor: Florian Venzke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat sich erledigt.
Ich hatte nicht den Normal-Operation-Mode eingestellt.
Wer ahnt denn auch, dass das Teil Anfangs in einem Shutdown-Mode
rumgammelt :-/

Florian

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.