Da ich einen Funkchip über SPI ansteuern muss und mein ATtiny44 nur USI kann, wäre ich über eine Routine in C oder entsprechende Hinweise sehr dankbar.
Gast
#1938270
Hi Datenblatt S.120. Sollte recht einfach nach C zu übersetzen sein. MfG Spess
Niemand zwingt Dich, das USI zu nehmen. Nimm ne ganz einfache SW-SPI und gut is. Peter
OK, aber hab ich noch nie gemacht. Hast du ein gutes Beispiel?
Gast
#1938460
Hi >OK, aber hab ich noch nie gemacht. >Hast du ein gutes Beispiel? Das ist auf dem Niveau: 2 LEDs blinken lassen. Wenn es schon daran hapert, wie willst du dann einen 'Funkchip' ansteuern? MfG Spess
spess53 schrieb: > Hi > Das ist auf dem Niveau: 2 LEDs blinken lassen. Wenn es schon daran > hapert, wie willst du dann einen 'Funkchip' ansteuern? Was ist falsch daran, nach einem Beispiel zu fragen, wenn ich das noch nie gemacht habe? Und der Funkchip der funktioniert bereits, aber eben über die SPI.
Gast
#1938471
Heimo G. schrieb: > Hast du ein gutes Beispiel? Nur senden: Zähler = 8 Schleife: Mosi = oberstes Bit im Datenbyte Sck = high kurz warten Sck = low Datenbyte einmal links schieben Zähler dekrementieren, wenn Zähler != 0, wieder die Schleife Die Realisierung in Code überlass ich dir. :-)
Gast
#1938475
Hi >Die Realisierung in Code überlass ich dir. >:-) Das ist aber nicht Copy&Paste-Fähig. MfG Spess
Gast
#1938476
spess53 schrieb: > Das ist aber nicht Copy&Paste-Fähig. Dafür müsste er ja auch seine Programmiersprache angeben ^^
Gast
#1938484
Hi >Dafür müsste er ja auch seine Programmiersprache angeben ^^ Hat er doch: >...wäre ich über eine Routine in C oder entsprechende Hinweise sehr >dankbar. MfG Spess
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
Peter
Gast
#1938492
Peter Dannegger schrieb: > if( SPI_MISO_PIN ) > val += 1; sollte man das Einlesen nicht während der Clockperiode machen? :-)
Floh schrieb: > sollte man das Einlesen nicht während der Clockperiode machen? > :-) Man sollte es so machen, wie es im Datenblatt des zu kontrollierenden Chips steht (den wir aber nicht kennen). Mein Bespiel liest einen 74HC165 ein. Peter
Hallo Peter! Ich habe nun doch eine USI-SPI Routine geschrieben. Soweit ich das überprüfen konnte, sollte es funktionieren. Leider kann ich aber am DO (Pin PA5) kein Signal messen. Was ist falsch? Hier der Code:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
Funktioniert schon! :-) Der "Fehler" war bei der Initialisierung des Input-Pins (PA6): DDRA &= !(1<<PA6); habe ich auf DDRA &= ~(1<<PA6); ausgebessert. Warum nimmt das AVR-Studio das ! als Negation hier nicht an?
Heimo G. schrieb: > Warum nimmt das AVR-Studio das ! als Negation hier nicht an? 1) weil das eine C-Sache ist 2) weil ! die logische Negierung ist und nicht die bitweise Am Beispiel von 5 (0b00000101) !5 ergibt 0, weil 5 nicht 0 ist ( 5 ist logisch TRUE und dessen Negierung ist logisch FALSE) ~5 ergibt 0b11111010, weil jedes Bit umgedreht wird
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.