Tachchen alle zusammen... Ich bin noch nicht so richtig fit was Mikrocontroller Programmierung angeht, deshalb möchte ich mich an die Erfahrenen hier wenden. Ich habe mir bei Maxim zwei Samples von dem MAX6675 bestellt. Möchte mir eine kleine Temperaturregelung bauen. Mit SPI habe ich aber noch nie was gemacht. Sprich ich weiss gaaaanz groben wie die Schnittstelle funktioniert aber mehr auch nicht. Hat denn jemand eventuell einen funktionierenden Code um die Temperatur eines solchen ICs auszulesen? Am besten auch noch dokumentiert? Und welche Pins von dem IC muss ich an welche des Controllers anschließen? Also wie gesagt, ich habe programmiertechnisch Null Ahnung von dem SPI. Habe jetzt schon etliche Seiten durchgeschaut, aber nichts gefunden was mir weiterhelfen könnte. Danke schonmal im Voraus.
>>Habe jetzt schon etliche Seiten durchgeschaut, aber nichts gefunden was >>mir weiterhelfen könnte. dann schau mal in die etlichen Seiten vom Datenblatt, da wirst du sicher was finden. Mit CodevisionAVR ist SPI sehr leicht anwendbar, allerdings musst du schon wissen was du übertragen musst, sonst bringt dir die beste Doko nichts...
Hi, ich habe hier ein Assemblercodeschnipsel für das Auslesen des Max6675. Die SPI-Schnittstelle ist hier ne Softwarelösung. Funktioniert super! Prozessor ist ein Mega128 mit 8 MHz internem Takt. Der Max ist an den Hardware-SPI-Pins angeschlossen. Also MISO,SCK und SS [avrasm ] init_SPI: ldi temp,0b01011100 ;01010111 out spcr,temp ldi temp,0b00000001 ;Portb 0 (/CS) auf Ausgang out ddrB,temp out portb,temp ret read_SPI: nop nop nop cbi portb,0 ;CS auf low ldi temp,0b10101010 out spdr,temp warteSpi1: sbis spsr,spif ;warten bis Übertragung beendet ist rjmp warteSPI1 in temp,spdr rcall sendbyte2 ldi temp,0b10101010 out spdr,temp warteSpi2: sbis spsr,spif ;warten bis Übertragung beendet ist rjmp warteSPI2 in temp,spdr rcall sendbyte2 sbi portb,0 ;CS auf high ret read_spi2: ldi temp,0b00000011 out ddrb,temp cbi portb,1 sbi portb,0 rcall delay5ms clr temp2 cbi portb,0 nop rcall bit_einlesen rcall bit_einlesen rcall bit_einlesen rcall bit_einlesen rcall bit_einlesen rcall bit_einlesen rcall bit_einlesen rcall bit_einlesen sts Thermo_High,temp2 clr temp2 rcall bit_einlesen rcall bit_einlesen rcall bit_einlesen rcall bit_einlesen rcall bit_einlesen rcall bit_einlesen rcall bit_einlesen rcall bit_einlesen sts Thermo_Low,temp2 sbi portb,0 lds temp,Thermo_Low andi temp,0b11111000 lds temp2,Thermo_High andi temp2,0b01111111 clc ror temp2 ror temp ror temp2 ror temp ror temp2 ror temp ldi dv16ul,4 ;duch 4 Teilen wegen Auflösung 0,25°C ldi dv16uh,0 rcall div16u mov temp,dres16ul mov temp2,dres16uh sts thermo_low,temp sts thermo_high,temp2 ret bit_einlesen: sbi portb,1 ; sck high nop in temp, pinb cbi portb,1 ror temp ror temp ror temp ror temp rol temp2 ret [/avrasm]
Danke erstmal für den Code, hat denn noch jemand was in C ?? Assembler ist ja noch schlimmer ;-) Und was die Doku angeht, da hab ich schon reingeschaut, aber ich verstehe diese Timinggeschichten bzw. die Diagramme nicht so recht. Müsste halt schon wissen wie ich die zu lesen habe ;-)
also das ist doch wirklich nicht schwierig, ich hab mir gerade mal das Datenblatt angeschaut, das besteht ja nur aus 9 Seiten... Da steht sogar wie du den IC an einen Mikrocontroller anschließt. Wenn du Daten übertragen haben willst, zieh CS auf low, wackel am SCK Pin 16 mal und lies die Daten ein wenn SCK von high nach low geht Aber genau so steht es ja auch im Datenblatt bzw Timingdiagramm, das solltest du also schon verstehen Wofür brauchst du denn eigentlich den mega128?
Den mega128 hab ich nur auf dem Testboard drauf. Soll später mal auf nem mega8 laufen. Was größeres brauche ich ja nicht. Ok, das Datasheet scheint wohl echt nicht soooo kompliziert zu sein. Nochmal zu dem Punkt "Wenn SCK von high nach log weg -> Daten auslesen? Brauch ich dann noch eine Interruptroutine um die fallende Flanke zu erwischen? Und wie regel ich das mit den Timings? Muss ich das immer mitm Timer machen ?
es gibt prinzipiell zwei Möglichkeiten mit SPI: Software SPI oder Hardware SPI Wenn du dich für Software SPI entscheidest musst du das "Timing" alles selbst machen, also SCK auf HIGH und das Bit einlesen. Alternativ und einfacher ist die Hard SPI. Weiterer Vorteil ist, dass der Controller die Daten parallel zu anderen Berechnungen durchführen kann. Lies dir dazu am Besten mal den entsprechenen Abschnitt im Datenblatt vom mega8 bzw 128 durch Um das Lesen wirst du nicht drum herum kommen, da hilft nichts
Schau mal bei http://www.elektor.de/jahrgang/2006/januar/smd-lotofen.63901.lynkx vorbei. Dort kannst Du Dir eine C-Treiber fuer den Max6675 für'n Mega Controller downloaden.
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.