Ich will mit folgendem Pascal-Code eine SPI-Output realisieren, welcher
ein Schieberegister 74HC595 ansteuert. Es ist nur ein einfacher Zähler.
Was habe ich bei den Registern übersehen, das ich nicht Hardwaremässig
auf den USI schreiben kann ? Die Led an BP7 leuchtet voll.
Wen ich aber mit SPIWriteDataSoft schreibe, funktioniert alles
wunderbar. Und LED an BP 7 leuchtet geschwächt, somit ist wie erwartet
ein Clock vorhanden.
Ich denke, der Fehler liegt irgendwo bei USICR oder hier: while (USISR
and (1 shl USIOIF)) = 0.
Kann mir jemand einen Tip geben ?
Pascal auf AVR8 ist mir fremd, deshalb vorab die Bitte um
Entschuldigung, falls ich falsch liege: ich sehe in SPIWriteDataSoft
nicht, wo/wie getaktet wird per USICR.USICLK.
Ich habe 2 Fehler gefunden, dies Ausgabe muss so aussehen.
Initialisierung am Angang brauch es keine.
1
procedure SPIWriteData(p: PByte; len: byte);
2
var
3
i: byte;
4
begin
5
SPI_Port.SlaveSelect := False;
6
for i := len - 1 downto 0 do begin
7
USIDR := p[i];
8
USISR := 1 shl USIOIF;
9
10
repeat
11
USICR := (%01 shl USIWM) or (%10 shl USICS) or (1 shl USICLK) or (1 shl USITC);
12
until (USISR and (1 shl USIOIF)) <> 0;
13
14
end;
15
SPI_Port.SlaveSelect := True;
16
end;
Und der zweite grösste Fehler, DI und DO vertauscht.
Ich habe mich durch die Bezeichnung MISO und MOSI auf dem ATiny2313
verwirren lassen.
Anscheinend ist MISO und MOSI nur für den Programmer gültig.
Auf diesem Bild ist DI und DO nicht mal vorhanden:
http://arduinolearning.com/wp-content/uploads/2016/08/attiny2310arduino.jpg
Hier habe ich DI und DO zufällig entdeckt.
Noch eine Frage hätte ich noch, wen ich das ganze für den Atmega328
machen will, muss ich da die Leitungen MOSI und MISO auch kreuzen ?
> Noch eine Frage hätte ich noch, wen ich das ganze für den Atmega328> machen will, muss ich da die Leitungen MOSI und MISO auch kreuzen ?
SS sollte dort als Ausgang geschaltet sein.
Mosi heißt :master out, slave in
Miso heißt: master in, slave out
mfG
Mathias B. schrieb:> Anscheinend ist MISO und MOSI nur für den Programmer gültig.
Man muss halt aufpassen, wer Master und wer Slave ist.
Programmierung: Programmer ist Master, AVR ist Slave, MOSI / DI am AVR
ist Input, MISO / DO ist Output.
Schieberegister: AVR ist Master, 595 ist Slave. Hier gelten MOSI / MISO
nicht, DI ist Input, DO ist Output.
Man kann den AVR aber auch an einem anderen AVR als Slave betreiben. Ja,
ich hab auch schonmal die Leiterbahnen zu einer SD-Karte weggekratzt und
über Kreuz gelötet. ;-)
Mathias B. schrieb:> Und der zweite grösste Fehler, DI und DO vertauscht.> Ich habe mich durch die Bezeichnung MISO und MOSI auf dem ATiny2313> verwirren lassen.
Da bist Du nicht der einzige. Was auch immer die bei Atmel geraucht
haben, damals die Pinzuordnung festgelegt wurde...
Der zweite Fehler liegt darin, zu suggerieren USI wäre ein
(vollwertiger) Ersatz für das SPI-Modul der ATMegas. Eigentlich ist es
nur eine kleine Hilfe für Software-SPI: Man spart sich das Schieben und
muß trotzdem noch quasi-manuell toggeln...
Der Gipfel ist der Quellcode zur Appnote AVR319, wo das Toggeln durch
einen Timer-Interrupt getriggert wird. Wer bitte braucht SPI-Takte im
unteren kHz-Bereich?
... mich würde der verwendete Pascal Compiler intetessieren. Es soll
Leute geben, die es geschafft haben, FreePascal für AVR und STM32 ans
laufen zu bringen... ich wars nicht.
Ralph S. schrieb:> ... mich würde der verwendete Pascal Compiler intetessieren. Es soll> Leute geben, die es geschafft haben, FreePascal für AVR und STM32 ans> laufen zu bringen... ich wars nicht.
Das oben kompiliert problemlos mit Freepascal, AVR Embedded, Subsystem
AVR25 (das sind die meisten Tinys).
Man sollte allerdings tunlichst die aktuelle Trunk mit FPC 3.1.1 nehmen.
Dafür werden wie man sieht so nette Sachen wie Boolean Datentypen,
Bitpacked Arrays unterstützt, und effizient umgesetzt.
Zur Installation schaust Du am besten im deutschen Lazarusforum.
Karl K. schrieb:> Zur Installation schaust Du am besten im deutschen Lazarusforum.
.. das hab ich schon geguckt... Hmmmm, kannst du ein 32 und ein 64 Bit
Binary hochladen?
Ralph S. schrieb:> ... mich würde der verwendete Pascal Compiler intetessieren. Es> soll Leute geben, die es geschafft haben, FreePascal für AVR und STM32> ans laufen zu bringen... ich wars nicht.
Ich gehöre dazu.
Das Tutorial für Arduino/STM32 und Lazarus ist von mir. Wobei es mit dem
STM32 noch recht habert,
Das Problem mit dem USI habe ich schon ins Tutorial aufgenommen.
Ich bin um jede Anregung und Kritik dankbar, nur somit habe ich ein
Canche das Tutorial zu verbessern.
Bei Problemen unschieniert im deutschen Lazarus Forum fragen.