-
Hallo *Mario*
Schön, dass Du wieder was berichtest. Ich schreibe jetzt ein Programm (in ASM) für mein Logic Analyser und habe ich bis jetzt ca. 16 kB fertig.
Ich wollte mir die Variablen in Bank 5 ablegen, aber es ist leider ohne relocable code nicht möglich (habe ich sogar im Microchip Forum nachgefragt). Ich kann mir aber, wegen den bremsenden "banksel", das nicht leisten, da es sehr schneller multitask ist.
Ich benutze Timer0 und Timer1 zum Messen der Taktfrequenz (variabler LC Oszillator) und musste externen 32 kHz Oscillator verwenden, weil der Timer1 Oszillator mit einem Uhrenquarz nicht funktioniert hat, oder wenn schon, dann nicht auf der Quarzfrequenz, sondern daneben. Ich mache alles echt und halte Simmulationen als Zeitverlust. Um externen Oscillator für Timer1 zu nutzen, muss aber Timer1 Oscillator in T1CON eingeschaltet (T1OSCEN bit gesetzt) sein. Das ist aber eine Falle vom Datenblatt. Ich hoffe, dass ich durch die alle Fallen durchkomme und mein Logic Analyser bald fertig wird.
Schöne Grüsse ! :)
-
Hallo PICture,
ich werd mir das mal im Datenblatt (MCU-Manual) zum Timer1 ansehen. Klingt jedenfalls komisch. Zu den Simulationen: Prinzipiell gebe ich Dir recht, dass Aufbau mehr Wahrheit zeigt. Ich Simuliere hauptsächlich mehr wegen Ermangelung an Ausrüstung und Zeit (da kann ich mal zwischendurch was machen ...).
Der zweite Grund ist, dass man besseres Debugging in MPLAB machen kann. Beispielsweise einen EEPROM mit dessen Protokoll.
Für den Timer kannst Du's wie folgt machen:
Erstelle eine Text-Datei (Endung .scl) mit folgendem Inhalt:
configuration for "pic16f876a" is
end configuration;
testbench for "pic16f876a" is
begin
RTCLKIN: process is
begin
loop
T1CKI <= '0';
wait for 15 us;
T1CKI <= '1';
wait for 16 us;
end loop;
end process RTCLKIN;
end testbench;
Dann kannst Du mit "Attach SCL" die Datei in MPlab einhängen. Damit kannst Du dann den Code testen, der Timer wird brav das machen was er soll, auch interrupt generieren (wenn konfiguriert).
Grüße
Mario
-
Hallo *Mario*!
Vielen Dank für Deine Bemühungen mich zur Simulation zu bringen, da hast Du aber leider keine Chancen! :)
Was nutzt mir das, wenn in der Wirklichkeit, der Uhrenquarz vom Timer1 Oszillator als Kondensator gesehen wird ?
Schöne Grüsse!
-
Hallo Zusammen,
wäre ein Hinweis auf die verwendete Version nicht von Nutzen ?
Oder ist es bei Euch immer die aktuelle Version.
Gruss Ritchie
-
@Ritchie,
guter Hinweis. Ich beziehe mich auf die Version 7.31. War bis vor kurzem noch die neueste Version ...
Ich glaube dass es ratsam ist, immer auf die neueste Version zu setzen, die Liste der bekannten Fehler ist ja geradezu erschreckend! (wegen SCL werde ich aber nicht auf 8.xx umsteigen (können)).
@PICture,
hast vollkommen recht. Da ich kein Oszi habe, kann ich das sowieso nicht nachprüfen, bzw. nur über den PIC selber (Main-Clock-Vergleich mit 32kHz Clock etc. , sonst ist "gut raten" angesagt. Ich benutze deshalb die Simulation für digitale Anwendungen, analoges ist aussen vor :). Da kriegt man wirklich die blödsten Fehler raus, beispielsweise Display-ansteuerung, digitale nicht-standard Bauteile, etc. ...
Gruß
Mario
-
Hallo!
Anscheinend ist die Reihenfolge den "#define" Direktiven wichtig. Ich weiss es nicht warum, aber bei dem zweiten Beispiel im Code wird das Unterprogramm "RegClr" nicht ausgeführt, wenn "call Test0" benutzt wird.
Wenn es aber so wie in dem ersten Beispiel definiert wird, funktioniert es.
MfG
Code:
#define @DT PORTB,7
#define @CK PORTB,6
#define @TDT TRISB,7
#define @TCK TRISB,6
#define Test0 RegClr
#define _Fcra Flags,0
#define _Fcrp Flags,1
#define _Fdca Flags,2
#define _Ferr Flags,3
#define @DT PORTB,7
#define @CK PORTB,6
#define @TDT TRISB,7
#define @TCK TRISB,6
#define _Fcra Flags,0
#define _Fcrp Flags,1
#define _Fdca Flags,2
#define _Ferr Flags,3
#define Test0 RegClr