Hallo zusammen! Ich arbeite gerade an einem Projekt, bei dem ich eine RTC (über I²C) und eine SD Karte (SPI) zeitgleich an einem 18F458 betreiben muss. Die RTC soll dabei in bestimmten Intervallen angesprochen werden und einen Timestamp auf die MMC schreiben. I²C und SPI werden bei diesem PIC von den gleichen PINs angeboten. Daher hab ich jetzt drei Möglichkeiten: - RTC über I²C und MMC über Soft-SPI - RTC über Soft-I²C und MMC über SPI - RTC über I²C und MMC über I²C-SPI Bridge Hat jemand von euch schon Erfahrungen damit gesammelt oder einen Tipp, welches die einfachste bzw. logischste Lösung ist? Vielen Dank schon mal im Voraus!
SD-Karten wuseln ja ordentlich Daten umher (FAT usw.), da würde ich das harte SPI nehmen. Für die paar Byte des RTC reicht weiches I2C völlig. Oder viele MCs erlauben direkt den Anschluß eines Uhrenquarzes im Stromsparmodus, dann ohne extra RTC-Chip. Peter
Das mit dem Quarz geht leider nicht, da der µC schon auf einer Embeddedplatine sitzt. Das mit dem Software-I²C lese ich mir jetzt schon die ganze Zeit durch. Aber da ich (noch) nicht soo viel Routine im C Programmieren hab, weiß ich nicht wirklich, wie ich da rangehen soll. Ein Beispiel in C auf PIC bezogen hab ich noch nicht gefunden.. Kenn vielleicht jemand einen guten Link oder hat selbst schon mal eine SW-I²C-Routine für PICs geschrieben?
Gast
#1683964
http://www.sprut.de/electronic/pic/grund/i2c.htm http://www.sprut.de/electronic/pic/grund/i2c_soft.htm
Die Sprutseiten hab ich auch schon alles durch. Ich würde halt nur gerne in C bleiben, da ich mich da etwas "wohler" fühle :)
Ist fürn AVR, sollte aber leicht anzupassen sein. Beim PIC sind wohl die Directionbits anders rum.
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 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
Peter
Vielen Dank für den Code, Peter! Ich werd's direkt mal testen.
Gast
#1684072
Hier noch ein 8051-C-Code für Software I2C, dort sieht man sehr genau und auf den ersten Blick, wann welcher Pin welchen Zustand hat.
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 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
88 | |
89 | |
90 | |
91 | |
92 | |
93 | |
94 | |
95 | |
96 | |
97 | |
98 | |
99 | |
100 | |
101 | |
102 | |
103 | |
104 | |
105 | |
106 | |
107 | |
108 | |
109 | |
110 | |
111 | |
112 | |
113 | |
114 | |
115 | |
116 | |
117 | |
118 | |
119 | |
120 | |
121 | |
122 | |
123 | |
124 | |
125 | |
126 | |
127 | |
128 | |
129 | |
130 | |
Gast
#1684236
Andre K. schrieb: > Die Sprutseiten hab ich auch schon alles durch. Ich würde halt nur gerne > in C bleiben, da ich mich da etwas "wohler" fühle :) Inline ASM ???
Gast
#1684601
Microchip hat auch noch Funktions-Bibliotheken in denen Software und Hardware-Schnittstellen angesprochen werden können. Keine Ahnung ob die was taugen. http://ww1.microchip.com/downloads/en/devicedoc/MPLAB_C18_Libraries_51297f.pdf
Ich habe eine Steuerung gebaut, die I2C- und SPI-Slaves anspricht (und das mit 5V und 3,3V!). Mit einem Analog-Umschalter (4053?) schalte ich die SDA/SCL-Signale auf jeweils einen Bus (Pull-Ups bzw -downs intelligent gewählt). Läuft prima. Die Software aktiviert immer das benötigte Hardware-Modul und den Umschalter und spricht die Geräte an.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.