Op dinsdag 17 december 2024 15:59:51 schreef Arco:
For lCnt = 0 to 15
DDS_DATA = (pVal >> lCnt) And 0x0001
DDS_CLK = 0
DDS_CLK = 1
Next lCnt
Op dinsdag 17 december 2024 16:30:23 schreef Arco:
Je hebt gelijk, de compiler zit een foutje in, bits hoger als 7 worden (ten onrechte) als fout gezien.
Wat gebeurt er als je schrijft:
For lCnt = 0 to 15
DDS_DATA = pVal And 0x0001
DDS_CLK = 0
pVal = pVal >> 1
DDS_CLK = 1
Next lCnt
?
Ziet ie het als error of doet ie gewoon een 8-bit shift? (dus met nul voor de hogere bitjes?
De "shift X bits" zal "lastig" op de hardware mappen. dwz, prima te doen voor 1 byte, maar lastig voor meerdere bytes (een word).
De hardware heeft vrijwel altijd support om een >>1 te doen die makkelijk naar langere woordlengtes uit te breiden is.
ALS er nog wat te berekenen valt dan zet ik dat tussen de hoog-laag van de clock. Op een snelle processor (e.g. RP2040) kan het zijn dat de clock hoog, clock laag tot ieder 1 instructie worden gereduceerd. Dan krijg je een 1 clock puls: 8ns op de RP2040. Dat kan te kort zijn om een geldige puls aan de buitenkant van de CPU te krijgen. Met IETS er tussen wordt het altijd minstens 1 clock langer.
edit: Ik heb geen pic(*), geen enkele interesse om weer in basic te gaan programmeren. dus zelf proberen zit er niet in.
(*) Nouja, er liggen hier een paar, maar niemand wil ze kopen.