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
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
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)
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.