Da gab´s vor kurzem einen ganz ähnlichen Thread hier im ForumDa ich ein neben mindestens 3 Tastern (<Leiser>|<Menü>|<Lauter>) auch noch ein Display und eine Display-Beleuchtung ansteuern möchte, wäre meine 2te Frage: Reicht ein ATMega8 dazu aus?
Trotzdem gerne nochmal:
Ja, ein einziger AT Mega reicht aus. Du könntest es z.B. so machen, dass bei jedem Tastendruck ein Flag gesetzt wird, das in der Hauptschleife abgefragt wird. Ist das Flag gesetzt, ist offensichtlich etwas passiert, und dann wird das LC-Display mit den aktuellen Werten versorgt.
Nachdem Du die Bascom-Hilfe zu den drei SPI-Befehlen ja offensichtlich noch nicht gelesen hast, erkläre ich´s hier mal kurz:
Für SPI brauchst Du mindestens 3 und höchstens 4 Leitungen zwischen Master (AT Mega) und Slave (z.B. elektronisches Poti):
- Datenleitung Master -> Slave
- Datenleitung Slave -> Master (wird nicht benötigt, wenn der Slave ein reiner "Befehlsempfänger" ist)
- Taktimpuls (Clock)
- "Chip Select": Wenn der Master diesen Anschluss des Slaves auf Low zieht weiß der Slave, dass jetzt die Übertragung von Takt & Daten beginnt.
Bei den meisten peripheren Bausteinen heißt dieser Anschluss "CS", Bascom verwendet die historisch etwas unglückliche Abkürzung "Ss" (=Slave select)
In Bascom kannst Du diese Anschlüsse frei auf beliebige I/O-Ports zuordnen, und zwar mit dem Config SPI Befehl:
Heißt also dass über B.1 Daten rausgehen (dieser Pin muss dann mit dem Daten-Eingang des Potis verbunden werden), der Takt kommt bei B.3 raus (geht an den Clock-Anschluss des Potis), und B.2 als "Slave Select" wird mit dem Chip-Select-Anschluss des peripheren Bausteins verbunden.Code:Config Spi = Soft , Dout = Portb.1 , Ss = Portb.2 , Clock = Portb.3 SPIINIT
Spiinit initiiert diese Konfiguration, und schon kann die Übertragung losgehen.
Mit dem Befehl Spiout kann man nun zwischen einem und 255 Bytes vom Master zum Slave schicken. Der Spiout-Befehl hat die Syntax "Spiout X, Y", wobei X der Name der Variablen ist, und Y die Anzahl an Bytes, die gesendet werden sollen. Bei einem einzigen Byte ist es einfach:
Sollen mehrere Bytes hintereinander gesendet werden, muss man sie in ein Array anlegen. Hierbei muss man wissen, dass man mit dem Spiout-Befehl auch festlegen kann, welches das erste Byte aus dem Array sein soll, das übertragen wird. Auch hier ein Beispiel:Code:Dim A as Byte A=&b00101010 Spiout A, 1
Code:Dim A(10) as Byte A(1)=&b00101010 A(2)=&b00000001 A(3)=&b11001010 ... A(10)=&b11111100sendet die 2 Bytes A(3) und A(4)Code:Spiout A(3), 2
sendet die 6 Bytes A(2) bis A(Code:Spiout A(2), 6.
Jetzt müsste man nur noch wissen, welche Art von Daten-Bytes Dein digitales Potentiometer erwartet. Auch hier lesen wir gerne das Datenblatt für Dich, nur sagen wie der Chip heißt müsstest Du uns schon selbst
Lesezeichen