This:
Scanning through 56 LEDs:Code:' Blink 56 LEDs connected to PORT A in charlie-plex manner ' PIC 18F44K22 int osc 64MHz ' PBP v2.60c ' MPASM v5.49 ' MCS+ v2.1.0.7 ' U2 programmer v4.32 asm __CONFIG _CONFIG1H, _FOSC_INTIO67_1H & _PLLCFG_ON_1H & _PRICLKEN_OFF_1H & _FCMEN_ON_1H & _IESO_OFF_1H __CONFIG _CONFIG2L, _PWRTEN_ON_2L & _BOREN_SBORDIS_2L & _BORV_285_2L __CONFIG _CONFIG2H, _WDTEN_OFF_2H __CONFIG _CONFIG3H, _CCP2MX_PORTC1_3H & _PBADEN_OFF_3H & _CCP3MX_PORTE0_3H & _HFOFST_OFF_3H & _T3CMX_PORTB5_3H & _P2BMX_PORTC0_3H & _MCLRE_EXTMCLR_3H __CONFIG _CONFIG4L, _STVREN_OFF_4L & _LVP_OFF_4L & _XINST_OFF_4L & _DEBUG_OFF_4L endasm DEFINE OSC 64 OSCCON = %01110000 ' OSCILLATOR CONTROL REGISTER ' bit 7 IDLEN: Idle Enable bit ' R/W 1 = Device enters Idle mode on SLEEP instruction ' 0 = Device enters Sleep mode on SLEEP instruction ' bit 6-4 IRCF<2:0>: Internal RC Oscillator Frequency Select bits(2) ' R/W 111 = HFINTOSC – (16 MHz) ' 110 = HFINTOSC/2 – (8 MHz) ' 101 = HFINTOSC/4 – (4 MHz) ' 100 = HFINTOSC/8 – (2 MHz) ' 011 = HFINTOSC/16 – (1 MHz)(3) ' If INTSRC = 0 and MFIOSEL = 0: ' 010 = HFINTOSC/32 – (500 kHz) ' 001 = HFINTOSC/64 – (250 kHz) ' 000 = LFINTOSC – (31.25 kHz) ' If INTSRC = 1 and MFIOSEL = 0: ' 010 = HFINTOSC/32 – (500 kHz) ' 001 = HFINTOSC/64 – (250 kHz) ' 000 = HFINTOSC/512 – (31.25 kHz) ' If INTSRC = 0 and MFIOSEL = 1: ' 010 = MFINTOSC – (500 kHz) ' 001 = MFINTOSC/2 – (250 kHz) ' 000 = LFINTOSC – (31.25 kHz) ' If INTSRC = 1 and MFIOSEL = 1: ' 010 = MFINTOSC – (500 kHz) ' 001 = MFINTOSC/2 – (250 kHz) ' 000 = MFINTOSC/16 – (31.25 kHz) ' bit 3 OSTS: Oscillator Start-up Time-out Status bit ' R 1 = Device is running from the clock defined by FOSC<3:0> of the CONFIG1H register ' 0 = Device is running from the internal oscillator (HFINTOSC, MFINTOSC or LFINTOSC) ' bit 2 HFIOFS: HFINTOSC Frequency Stable bit ' R 1 = HFINTOSC frequency is stable ' 0 = HFINTOSC frequency is not stable ' bit 1-0 SCS<1:0>: System Clock Select bit ' R/W 1x = Internal oscillator block ' 01 = Secondary (SOSC) oscillator ' 00 = Primary clock (determined by FOSC<3:0> in CONFIG1H). OSCCON2 = %00000100 ' OSCILLATOR CONTROL REGISTER 2 ' bit 7 PLLRDY: PLL Run Status bit ' R 1 = System clock comes from 4xPLL ' 0 = System clock comes from an oscillator, other than 4xPLL ' bit 6 SOSCRUN: SOSC Run Status bit ' R 1 = System clock comes from secondary SOSC ' 0 = System clock comes from an oscillator, other than SOSC ' bit 5 Unimplemented: Read as ‘0’. ' bit 4 MFIOSEL: MFINTOSC Select bit ' R/W=0 1 = MFINTOSC is used in place of HFINTOSC frequencies of 500 kHz, 250 kHz and 31.25 kHz ' 0 = MFINTOSC is not used ' bit 3 SOSCGO(1): Secondary Oscillator Start Control bit ' R/W=0 1 = Secondary oscillator is enabled. ' 0 = Secondary oscillator is shut off if no other sources are requesting it. ' bit 2 PRISD: Primary Oscillator Drive Circuit Shutdown bit ' R/W=1 1 = Oscillator drive circuit on ' 0 = Oscillator drive circuit off (zero power) ' bit 1 MFIOFS: MFINTOSC Frequency Stable bit ' R 1 = MFINTOSC is stable ' 0 = MFINTOSC is not stable ' bit 0 LFIOFS: LFINTOSC Frequency Stable bit ' R 1 = LFINTOSC is stable ' 0 = LFINTOSC is not stable OSCTUNE = %11000000 ' OSCILLATOR TUNING REGISTER ' bit 7 INTSRC: Internal Oscillator Low-Frequency Source Select bit ' R/W 1 = 31.25 kHz device clock derived from the MFINTOSC or HFINTOSC source ' 0 = 31.25 kHz device clock derived directly from LFINTOSC internal oscillator ' bit 6 PLLEN: Frequency Multiplier 4xPLL for HFINTOSC Enable bit(1) ' R/W 1 = PLL enabled ' 0 = PLL disabled ' bit 5-0 TUN<5:0>: Frequency Tuning bits – use to adjust MFINTOSC and HFINTOSC frequencies ' R/W 011111 = Maximum frequency ' 011110 = ' • • • ' 000001 = ' 000000 = Oscillator module (HFINTOSC and MFINTOSC) are running at the factory calibrated frequency. ' 111111 = ' • • • ' 100000 = Minimum frequency ANSELA = %00000000 ' Set ports to digital ANSELB = %00000000 ANSELC = %00000000 ANSELD = %00000000 ANSELE = %00000000 ADCON0 = %00000000 ' Disable ADC TRISA = %00000000 ' Set all Ports to output TRISB = %00000000 TRISC = %00000000 TRISD = %00000000 TRISE = %00000000 PORTA = %00000000 ' Set ports OFF PORTB = %00000000 PORTC = %00000000 PORTD = %00000000 PORTE = %00000000 varLEDstate VAR BYTE[55] varLEDport VAR BYTE[55] varArray var byte varEEPROM var byte varEEPROM = 0 '------------------------- T E M P O R A R Y ------------------------------ for varArray = 0 to 55 ' Location in Array varEEPROM = varEEPROM + 1 ' Location in EEPROM read varEEPROM, VARLEDstate[varArray] varEEPROM = varEEPROM + 1 read varEEPROM, VARLEDport[varArray] next varArray '------------------------------------------------------------------------------ pause 100 mainloop: for varArray = 0 to 55 ' LEDs in ascending sequence TRISA = VARLEDSTATE[varArray] PORTA = VARLEDPORT[varArray] PAUSE 15 next varArray for varArray = 55 to 0 step -1 ' LEDs in decending sequence TRISA = VARLEDSTATE[varArray] PORTA = VARLEDPORT[varArray] PAUSE 15 next varArray goto mainloop End DATA @1,%11111100 ' Pin A0 DATA %00000001 DATA %11111010 DATA %00000001 DATA %11110110 DATA %00000001 DATA %11101110 DATA %00000001 DATA %11011110 DATA %00000001 DATA %10111110 DATA %00000001 DATA %01111110 DATA %00000001 DATA %11111100 ' Pin A1 DATA %00000010 DATA %11111001 DATA %00000010 DATA %11110101 DATA %00000010 DATA %11101101 DATA %00000010 DATA %11011101 DATA %00000010 DATA %10111101 DATA %00000010 DATA %01111101 DATA %00000010 DATA %11111010 ' Pin A2 DATA %00000100 DATA %11111001 DATA %00000100 DATA %11110011 DATA %00000100 DATA %11101011 DATA %00000100 DATA %11011011 DATA %00000100 DATA %10111011 DATA %00000100 DATA %01111011 DATA %00000100 DATA %11110110 ' Pin A3 DATA %00001000 DATA %11110101 DATA %00001000 DATA %11110011 DATA %00001000 DATA %11100111 DATA %00001000 DATA %11010111 DATA %00001000 DATA %10110111 DATA %00001000 DATA %01110111 DATA %00001000 DATA %11101110 ' Pin A4 DATA %00010000 DATA %11101101 DATA %00010000 DATA %11101011 DATA %00010000 DATA %11100111 DATA %00010000 DATA %11001111 DATA %00010000 DATA %10101111 DATA %00010000 DATA %01101111 DATA %00010000 DATA %11011110 ' Pin A5 DATA %00100000 DATA %11011101 DATA %00100000 DATA %11011011 DATA %00100000 DATA %11010111 DATA %00100000 DATA %11001111 DATA %00100000 DATA %10011111 DATA %00100000 DATA %01011111 DATA %00100000 DATA %10111110 ' Pin A6 DATA %01000000 DATA %10111101 DATA %01000000 DATA %10111011 DATA %01000000 DATA %10110111 DATA %01000000 DATA %10101111 DATA %01000000 DATA %10011111 DATA %01000000 DATA %00111111 DATA %01000000 DATA %01111110 ' Pin A7 DATA %10000000 DATA %01111101 DATA %10000000 DATA %01111011 DATA %10000000 DATA %01110111 DATA %10000000 DATA %01101111 DATA %10000000 DATA %01011111 DATA %10000000 DATA %00111111 DATA %10000000
Persistence of vision, no noticeable difference (not all LEDs point directly up):
Current consumption (removed Power Indicator LED from circuit):
- all off = 11.5mA
- all on = 22.0 mA
Robert





Bookmarks