It works fine without definition on PIC16F1828.
In fact, if I add definition, compiler gives an error - Redefiniton of VAR
This is why I asked![]()
If you're using an enhanced midrange PIC16 device (like the PIC16F1828) then it has a WREG, so it works with them too without having to declare a 'WREG' variable.
It's only for the older PIC16's you'd have to define it, or just change all the references to WREG to a new variable name of your choice.
The above code works fine with TM1629A display.
But it does not work properly with APA102C leds.
I have the following statement:
SHIFTOUT di, ci, 1,[224+Bri[x],COLORS[X+16],COLORS[X+8],COLORS[X]]
Which I have replaced with
wreg=224+Bri[x]
gosub shout
wreg=COLORS[X+16]
gosub shout
wreg=COLORS[X+8]
gosub shout
wreg=COLORS[X]
gosub shout
The issue is that only odd bytes got transferred.
Say if I set some value to 2 or 4 it gets delivered to LEDs, but if I set it to 1 or 3 or 5 - nothing happens.
Tried to insert pause between each subroutine call - no difference
I also tried to add some NOPs as suggested above - no difference.
Don't know what to tell you... the routine transfers any values for WREG so there's no difference between odd/even values.
Must be some issue with the APA102C timing/format.
I will hook up scope and check both "versions", to find the possible issue.
Bookmarks