Hi, nach der vielen Hilfe hier hoffe ich das mir auch jemand bei meinem letzten Problem helfen kann. Auf dem miniCon537 befindet sich noch eine RTC die an den Adress und Datenbus angeschlossen ist. Um darauf zuzugreifen ist es notwendig die RTC wie einen ext. Speicher zu behandeln. Laut Anleitung muss dafür die RTC selektiert werden.Das Board besitzt dafür ein PLD das die erforderlichen CS Signale steuert. Leider ist mir nicht ganz klar wie das funktionieren soll. Hier nochmal der Link zur Anleitung: http://www.phytec.de/fileadmin/user_upload/downloads/Manuals/L-003d_2.pdf Das auf meinem Board verwendete PLD ist genau das was in der Anleitung beschrieben ist.Im Anhang auch das PLD Source. Es ist auch immer die Rede von Basis Adresse. Was ist das genau.Wie die RTC an sich funktioniert ist mir klar,aber ich bekomme leider nicht herraus wie ich die RTC selektiere.Wenn ich das richtig sehe muss EW auf LOW gebrauch werden.m Aber wie?
Wenn ich es richtig verstehe muss ich mit: MOV A,Adrese des Banklatches MOVX @DPTR,A das zuständige cs Signal für die RTC einstellen. Aber wie ist die Adresse von diesem Banklatch? Und welche Daten müssen dann geschrieben werden?
So wie ich das sehe, wird die RTC ab FA00H adressiert. Die RTC ist auf Seite 47 beschrieben. Ansonsten Tante gugel nach dem Datenblatt fragen. Das Banklatch hat damit eigentlich zunächst nix zu tun.
:
Bearbeitet durch User
Ne Sorry so muss das heißen: MOV DPTR,Adresse von Adresslatch MOV A,#was geschrieben werden soll movx @DPTR,A
Bist du sicher das das Banklatch nichts damit zu tun hat. Oder ich verstehe das falsch. Auf Seite 34 steht etwas über Chip Enable Signale. Und Signal EW1 ist für die RTC. Ich habe auch am Chip gemesen. CE ist immer High.
blutengel schrieb: > Und Signal EW1 ist für die RTC. Ich habe auch am Chip gemesen. CE ist > immer High. Sach ich doch. Basisadresse nach dem angegebenen PLD ist die FA00H. Und das erste EW1 Signal ist eben für die RTC. Das sollt auch High sein im Normalzustand. Oder hast du irgendein Programm drauf am laufen, welches die RTC anspricht ? Testhalber ginge auch das Monitorprogramm. Das Banklatch dürfte für die Umschaltung der beiden Speichermodelle da sein, um z.B. ein Intel Basic drauf laufen zu lassen, welches im oberen Bereich Programm und Daten gleichzeitig sehen will.
Ja habe eine Initalisierungsroutine laufen.Nach der Initalisierung wird die RTC in Dauerschleife ausgelesen und auf einem LCD ausgegeben. Die LCD Routinen habe ich mal jetzt aus Übersichts Gründen hier weg gelassen
1 | $INCLUDE (reg517aw.inc) |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | DS 32 ;32 Bytes für Stack reservieren |
8 | cseg at 0000h |
9 | |
10 | |
11 | ; Einstellen der Adressen der Register der RTC: |
12 | S1 EQU 0FA00H ;RTC-SFR Sekunden Einerstelle |
13 | S10 EQU 0FA01H ;RTC-SFR Sekunden Zehnerstelle |
14 | Min1 EQU 0FA02H ;RTC-SFR Minuten Einerstelle |
15 | Min10 EQU 0FA03H ;RTC-SFR Minuten Zehnerstelle |
16 | H0 EQU 0FA04H ;RTC-SFR Stunden Einerstelle |
17 | H10 EQU 0FA05H ;RTC-SFR Stunden Zehnerstelle |
18 | D1 EQU 0FA06H ;RTC-SFR Tage Einerstelle |
19 | D10 EQU 0FA07H ;RTC-SFR Tage Zehnerstelle |
20 | M1 EQU 0FA08H ;RTC-SFR Monate Einerstelle |
21 | M10 EQU 0FA09H ;RTC-SFR Monate Zehnerstelle |
22 | Y1 EQU 0FA0AH ;RTC-SFR Jahre Einerstelle |
23 | Y10 EQU 0FA0BH ;RTC-SFR Jahre Zehnerstelle |
24 | Week EQU 0FA0CH ;RTC-SFR Wochentag |
25 | REGD EQU 0FA0DH ;RTC-SFR Steuerregister D |
26 | REGE EQU 0FA0EH ;RTC-SFR Steuerregister E |
27 | REGF EQU 0FA0FH ;RTC-SFR Steuerregister F |
28 | |
29 | LCALL rtc_init0 |
30 | |
31 | loop: |
32 | |
33 | lcall rtc_lesen |
34 | |
35 | mov A,#10000001b ;zeile 1 pos 40h |
36 | LCALL set_cursor ;Cursor an Adresse setzen |
37 | |
38 | MOV R1,#35H ;Uhrzeit Std. im Datenspeicher |
39 | MOV A,@R1 |
40 | LCALL Zeichen |
41 | DEC R1 |
42 | MOV A,@R1 |
43 | LCALL Zeichen |
44 | DEC R1 |
45 | MOV A,#3AH |
46 | LCALL Zeichen |
47 | MOV A,@R1 ;Uhrzeit Minuten |
48 | LCALL Zeichen |
49 | DEC R1 |
50 | MOV A,@R1 |
51 | LCALL Zeichen |
52 | DEC R1 |
53 | MOV A,#3AH |
54 | LCALL Zeichen |
55 | MOV A,@R1 ;Uhrzeit Sekunden |
56 | LCALL Zeichen |
57 | DEC R1 |
58 | MOV A,@R1 |
59 | LCALL Zeichen |
60 | |
61 | ljmp loop |
62 | ;................................................................... |
63 | rtc_init0: |
64 | MOV DPTR,#REGF |
65 | MOV A,#04H ;Test=0 immer, 24h Betrieb, Uhr aktiv, |
66 | MOVX @DPTR,A ; ... Reset inaktiv |
67 | MOV DPTR,#REGE |
68 | MOV A,#00H ; |
69 | MOVX @DPTR,A |
70 | MOV DPTR,#REGD |
71 | MOV A,#00H ;Hold auf Null |
72 | MOVX @DPTR,A ;Initialisierungsroutine gemäß |
73 | ;Programmbeispiel von Prof. vom Berg |
74 | ;laut Datenblatt |
75 | LCALL rtc_bereit |
76 | |
77 | MOV DPTR,#REGF |
78 | MOV A,#07H ;Test=0, 24h, Uhr stop, Reset aktiv |
79 | MOVX @DPTR,A |
80 | |
81 | MOV A,#06h ;Test 0 24h, uhr Stop, Reset inaktiv |
82 | MOVX @DPTR,A |
83 | |
84 | MOV DPTR,#S1 |
85 | MOV A,#00H |
86 | MOVX @DPTR,A |
87 | |
88 | MOV DPTR,#S10 |
89 | MOV A,#00H |
90 | MOVX @DPTR,A |
91 | |
92 | MOV DPTR,#Min1 |
93 | MOV A,#00H |
94 | MOVX @DPTR,A |
95 | |
96 | MOV DPTR,#Min10 |
97 | MOV A,#00H |
98 | MOVX @DPTR,A |
99 | |
100 | MOV DPTR,#H0 |
101 | MOV A,#00H |
102 | MOVX @DPTR,A |
103 | |
104 | MOV DPTR,#H10 |
105 | MOV A,#00H |
106 | MOVX @DPTR,A |
107 | |
108 | MOV DPTR,#D1 |
109 | MOV A,#03H |
110 | MOVX @DPTR,A |
111 | |
112 | MOV DPTR,#D10 |
113 | MOV A,#02H |
114 | MOVX @DPTR,A |
115 | |
116 | MOV DPTR,#M1 |
117 | MOV A,#02H |
118 | MOVX @DPTR,A |
119 | |
120 | MOV DPTR,#M10 |
121 | MOV A,#00H |
122 | MOVX @DPTR,A |
123 | |
124 | MOV DPTR,#Y1 |
125 | MOV A,#06H |
126 | MOVX @DPTR,A |
127 | |
128 | MOV DPTR,#Y10 |
129 | MOV A,#00H |
130 | MOVX @DPTR,A |
131 | |
132 | MOV DPTR,#Week ;Wochentag So=0, Mo=1, ... |
133 | MOV A,#04H ; entspr. Donnerstag |
134 | MOVX @DPTR,A |
135 | |
136 | MOV DPTR,#REGF |
137 | MOV A,#04H ;Test=0 immer, 24h Betrieb, Uhr aktiv, |
138 | MOVX @DPTR,A ; ... Reset inaktiv |
139 | MOV DPTR,#REGE |
140 | MOV A,#00H ; |
141 | MOVX @DPTR,A |
142 | MOV DPTR,#REGD |
143 | MOV A,#00H ;Hold auf Null |
144 | MOVX @DPTR,A ;Initialisierungsroutine beenden mit |
145 | ;einer Wiederholung der Anfangssequenz |
146 | |
147 | rtc_bereit: |
148 | MOV DPTR,#REGD |
149 | MOV A,#01H |
150 | MOVX @DPTR,A ;HOLD auf high |
151 | MOVX A,@DPTR ;Busy einlesen |
152 | ANL A,#02H ;und ausmaskieren (JNB ACC.1 nicht akzeptiert???) |
153 | CJNE A,#00H,ber ;wenn Busy low ist, ist die RTC bereit |
154 | MOVX A,@DPTR |
155 | Anl A,#0feH |
156 | MOVX @DPTR,A ;Hold auf low |
157 | SJMP rtc_bereit ;warten bis RTC bereit |
158 | ber: Anl A,#0feH |
159 | MOVX @DPTR,A ;Hold auf low |
160 | RET |
161 | |
162 | rtc_lesen: |
163 | MOV R0,#13D ;13 Uhrenregister |
164 | MOV R1,#30H ;Zeiger auf den unteren Datenspeicher |
165 | MOV DPTR,#S1 ;DPTR auf erstes Uhrenregister |
166 | next: call rtc_bereit ;ist die Uhr bereit zum Auslesen? |
167 | MOVX A,@DPTR ;Uhrzeit auslesen |
168 | ANL A,#0FH ;Ergebnis ausmaskieren |
169 | ADD A,#30H ;Formatierung für LCD-Ausgabe |
170 | MOV @R1,A ;und in der entspr. Speicherzelle ablegen |
171 | INC DPTR ;nächstes Uhrregister und ... |
172 | INC R1 ;nächsten Speicherplatz einstellen |
173 | DJNZ R0,next |
174 | ; MOV P1,30H ;Kontrollwert |
175 | RET |
176 | RET |
Ohne im Detail deinen Quellcode zu lesen, sollte das ungefähr so aussehen. Kommt kein CS an der Uhr oder wo liegt das Problem ?
Genau leider kein CS Signal. Ist immer High. Deshalb glaube ich das dies erst irgendwie aktiviert werden muss.
NIcht mit dem aufgelisteten PLD. Vielleicht steckt ja ein anderes drin. Evtl. auf Lochraster aufbauen und statisch durchtesten... Oder mach ein Programm, welches zyklisch alle Speicherzellen ausliest und auf einem Portpinr ein Syncsignal z.B. alle paar kB ausgibt. Und dann langsam einkreisen, ob überhaupt auf FA00H selektiert wird.
Ich habe mir mal den Adressbereich mit hterm anzeigen lassen siehe Bild.Egal was ich mache schein immer das selbe drin zu stehen
So habe jetzt mal ein Programm geschrieben das einmal jede Adresse von FA00h bis FC00h anwählt und habe ein Oszi an den CE Pin des RTC gesetzt.dazwischen war immer eine Sekunde Pause damit man nichts verpasst weils zu schnell ist, aber kein Mucks auf dem Ce Pin
Hast du einen Speicheroszi ? Mal bis FFFF listen lassen und schauen, was sich tut ?
Ne leider nicht. Egal welche Adresse ich anwähle es passier rein gar nichts. Das kann doch nicht so schwierig sein. Das Problem ist auch leider das es über das Board nicht viel gibt im Netz
Also der Fehler war eig. ganz einfach. NUr nicht einfach zu finden. Ihr hattet Recht. Das erste Uhrenregister fängt bei FA00h an. CS Signal muss nicht manuell gesezt werden. Je nachdem welche Adresse angesprochen wird,schaltet das PLD automatisch die CS Signale dadurch das A9 bis A15 an den PLD angeschlossen sind. Der Fehler aber lag in der rtc_lesen Routine. Dort wird ein Busy abgefragt.Dieser Befehl stand an der falschen Stelle.Es muss vor dem setzen der Adresse für das Uhrenregister abgefragt werden.
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.