Hallo liebe Forumgemeinde, ich habe eine Frage zum MAX6966. Generell funktioniert meine Kommunikation mit dem MAX6966. Allerdings dürfen keine all zu schnellen Befehle gesendet werden. Mal ein Register abfragen oder ein Wert in ein Register schreiben geht aber permanentes, schnelles „reinschreiben“ geht nicht. Meine Werte: ATmega16 12MHz Quarz Hardware SPI mit einem Teiler von 4 Ich sende mit dem Timer1 beim „Überlauf“ (16 Bit, prescale 32) zyklisch einen inc.- Wert an den MAX um ein dimmen der LED zu erzeugen. SCLK ist IDLE LOW und CS wird von mir im Quellcode bedient Was ich allerdings auf meinem OSZI erkenne ist dass wenn ich zwei Byte sende, ist zwischen dem 1. Byte und dem 2. Byte eine längere Pause (hängt wohl von der Hardware ab) Laut Datenblatt des MAX ist eine SPI Fequenz von 26MHz möglich, also weit über meinen SPI- Takt. Mein Code: /////per SPI senden: void spi_putchar(U8 data) { SPDR = data; while (!(SPSR & (1<<SPIF))); } ////// schreiben auf dem MAX void write_data(U8 address, U8 data) { CS_LOW(); spi_putchar(address); spi_putchar(data); CS_HIGH(); } ///////Timer Interrupt #pragma vector = TIMER1_OVF_vect __interrupt void interrupt_timer1(void) { write_data(0x04,toggel); uart_putchar(toggel); toggel +=0x0c; } /* Ende der Funktion ---------------------------------------------------------*/ Ich habe auch mal ein Oszibild mitgeschickt. Die gelbe Linie ist der Takt SCLK die grüne das CS. Vielleicht kann mir einer von Euch einen guten Tipp geben. Mit den besten Grüßen…
Gast
#1124949
>#pragma vector = TIMER1_OVF_vect >__interrupt void interrupt_timer1(void) >{ > write_data(0x04,toggel); >>>>>> uart_putchar(toggel); //Weg damit, löschen, entsorgen > toggel +=0x0c; >}
Hallo Holger. Danke für deine Antwort. Auch das enfernen hat nichts gebracht. Ich benutze diese Zeile um per Hyperterminal zu debuggen. Viele Grüße...
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.