Jo okay wenn ich es also richtig verstehe möchtest du den Takt sprich die Zeit ermitteln. Und der Tiny läuft auf 4,8Mhz um wenige Khz würde ich mich jetzt nicht festlegen wollen siehe
DB
During reset, hardware loads the calibration data into the OSCCAL register and thereby auto-matically calibrates the oscillator. There are separate calibration bytes for 4.8 and 9.6 MHzoperation but only one is automatically loaded during reset (see section “Calibration Bytes” onpage 104). This is because the only difference between 4.8 MHz and 9.6 MHz mode is an inter-nal clock divider
3,2/4,8 = 0,66666 sprich 66,66%
3,2Mhz = 312,5ns
4,8Mhz = 208,3ns Taktzeit
Sonst lese er mal vom Tiny das OSSCAL aus was nach einem RESET reingeschrieben wurde siehe Seite 104
The signature area of the ATtiny13 contains two bytes of calibration data for the internal oscilla-tor. The calibration data in the high byte of address 0x00 is for use with the oscillator set to 9.6MHz operation. During reset, this byte is automatically written into the OSCCAL register toensure correct frequency of the oscillator.There is a separate calibration byte for the internal oscillator in 4.8 MHz mode of operation butthis data is not loaded automatically. The hardware always loads the 9.6 MHz calibraiton dataduring reset. To use separate calibration data for the oscillator in 4.8 MHz mode the OSCCALregister must be updated by firmware. The calibration data for 4.8 MHz operation is located inthe high byte at address 0x01 of the signature area.
EIJJAAAAAAIJJAIIIIIIIIII da is ja so einiges im Argen.
1. Woher sollen wir wissen was in deinen Includes steht bzw ob es überhaupt sinnvoll ist ?
2. Includes entweder komplett vorne und hinten anfügen aber nicht unbedingt irgendwo im Programm.
3. Wenn du mit INT arbeitest was meinst du was du bei der Initialisierung noch brauchst ?
DEN STACKPOINTER!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4. Was steht in der ISR als Rücksprung bzw ist das RETI eingetragen ? Wenn nicht läuft er dir dein CTRL die gesamten ISR-Routinen durch, bisher sind sie für uns alle UNSICHTBAR siehe Punkt 1, und wenn da irgendwas steht wird das
gnaaaadenlos abgearbeitet was dann zu unerwarteten Effekten führen kann wie zb ein RESET des gesamten CTRL. Besonders wenn ein RET/RETI ausgeführt wird ohne den SP angelegt zu haben.
5. Sieh dir mal an wie ich es Bibliotheken gepackt habe https://www.roboternetz.de/community...328-Bibliothek
6. Zu
.ORG INT_VECTORS_SIZE ;Programmadresse nach den ganzen IRQ-Vektoren
was komplett falsch verstanden worden ist
EINMAL folgendes lesen https://www.mikrocontroller.net/topic/265926
7. Was meinst du wie sehr ein Taster prellt ? Da arbeitet er die Befehle folgend auf SBIC/S sofort mehrmals ab deshalb ist absolut unelegant einen Taster ohne Wartezeit oder Entprellroutine so abzufragen.
Sollte das Signal natürlich DIGITAL vorliegen ist es so durchaus normal. Leider fehlt der Kommentar was die Ursache zum Auslösen ist.
8. Zum Systemtakt änder verweise ich auf S.28 des DB wie dort 100%ig zu verfahren ist und nicht irgendwie https://ww1.microchip.com/downloads/...oc/doc2535.pdf
Vorschlag wenn du ohne große INIT usw usf deinen Systemtakt ermitteln möchtest wie folgt
INIT:
SBI DDRX , Y ; 2Takte
Start:
SBI PORTX , Y ; 2Takte
CBI PORTX , Y ; 2Takte
SBI PORTX , Y ; 2Takte
CBI PORTX , Y ; 2Takte
SBI PORTX , Y ; 2Takte
CBI PORTX , Y ; 2Takte
rjmp Start ; 2Takte
Beim RJMP bleibt das Bit etwas länger gelöscht ist aber nicht weiter schlimm man könnte daran erkennen wann das Programm wieder von vorn beginnt. So eine Art Synch....
PS: Dein nicht erklärbarer Takt kommt von deiner Software und von nichts anderen !!!! ASM macht nur das was DU, der Programmierer geschrieben hast, auch wenn mal etwas vergessen wurde
- - - Aktualisiert - - -
Das Problem hat NIX, 0 mit der HW des CTRL zu tun !!!!
Aber um die Informationslage etwas zu verdichten kann man ganz vereinfacht sagen das Daten erst auf den PORT/DDR/PIN gelegt/abgefragt werden wenn der nächste Systemtakt kommt. Dies soll sicherstellen das die Daten immer und zu jeden Zeitpunkt KONSISTENT sind.
Man stelle sich vor dies wäre nicht so und am Eingang/Ausgang wird es ASynchron geändert was das für ein Durcheinander in UNSERER SW geben würde. Manche Programmteile würde immer ausgeführt manche gar nicht und andere wiederum nur ab und an und manch andere nur mit gaaaanz viel Glück.
Siehe ADC wenn 10bit ausgelesen werden sollen wird das Datenwort, also die 10Bit = 8 Bit low und 2 Bit High, MUSS ADCL als erstes gelesen werden und erst wenn ADCH gelesen WORDEN ist wird ADCH:L für den ADC freigegeben wieder Ergebnisse dort zu hinterlegen damit die Datensätze konsistent bleiben.
Lesezeichen