16F676 HI-TECH blikání nejde jak by mělo

Ahoj, opět jsem tu já a můj problém s jednoduchým blikáním :slight_smile: z nějákého důvodu mi to nastavý do jedničky pouze PC1 a PC0 to jakoby přeskočí.

[code]#include “htc.h”
#include <stdio.h>
#define _XTAL_FREQ 20000000

#define PC0_on PORTC |= 0b00000001 //RC0
#define PC0_off PORTC &= 0b11111110

#define PC1_on PORTC |= 0b00000010 //RC1
#define PC1_off PORTC &= 0b11111101

void main (void)
{
TRISC = 0b00000000;

while(1)
{
	__delay_ms(500);
	PC0_on;
	PC1_on;
	__delay_ms(500);
	PC0_off;
	PC1_off;
}

}[/code]
mimochodem mi to samé dělá když tam dám while(1) { __delay_ms(500); RC0 = 1; RC1 = 1; __delay_ms(500); RC0 = 0; RC1 = 0; }

Zkus to takhle:

[code]void main (void)
{
ANSEL = 0x00;
TRISC = 0b00000000;

while(1)
{
__delay_ms(500);
PC0_on;
PC1_on;
__delay_ms(500);
PC0_off;
PC1_off;
}
}[/code]

Super, díky moc už to funguje! To je furt samej registr sem a tam :slight_smile:

Tak ještě jednou já, už mi to funguje z 66,667% dobře :slight_smile:, ale chci měnit logické úrovně na 6 pinech portu C a mění mi to pouze stavy na 1-4 a 5,6 jsou pořád stejné, na 5 je 1 a na 6 je 0. Stavy se mění s každým přetečením čítače. Je to nějáký divný, když to první 4 piny mění dobře a poslední 2 jsou furt stejný, doufám, že to není nějáká blbá chyba začátečnická. Prosím mohl byste se mi na to někdo podívat? Už jsem to prošel tolikrát ale furt tam nic nemůžu najít, čím by to mohlo být. Děkuji

[code]#include “htc.h”
#include <stdio.h>

#define T1_on PORTC |= 0b00000001 //RC0
#define T1_off PORTC &= 0b11111110

#define T2_on PORTC |= 0b00000010 //RC1
#define T2_off PORTC &= 0b00111101

#define T3_on PORTC |= 0b00000100 //RC2
#define T3_off PORTC &= 0b11111011

#define T4_on PORTC |= 0b00001000 //RC3
#define T4_off PORTC &= 0b11110111

#define T5_on PORTC |= 0b00010000 //RC4
#define T5_off PORTC &= 0b01101111

#define T6_on PORTC |= 0b00100000 //RC5
#define T6_off PORTC &= 0b11011111

void main (void)
{
ANSEL = 0b00000000;
TRISC = 0b00000000;

int count = 0;

TMR0 = 125;	//125
PSA = 0;	// Prescaler is assigned to the Timer0 module
PS0 = 0;	// Předdělička bit0
PS1 = 1;	// Předdělička bit1
PS2 = 1;	// Předdělička bit2
T0SE = 0;	// 0-náběžná hrana, 1-sestupná hrana
T0CS = 0;	// 0-clk_out,1-RA2

while(1)
{
	while(T0IF)
	{
		T0IF = 0;
		TMR0 = 125;
		count++;
	
		switch(count) 
    	{ 
			case 0:
			{	
				T5_off;;T6_on;
			}	break;
			case 1:
			{
				T4_off;T3_on;
			}	break;
			case 2:
			{
				T1_off;T2_on;
			}	break;
			case 3:
			{
				T6_off;T5_on;
			}	break;
			case 4:
			{
				T3_off;T4_on;
			}	break;
			case 5:
			{
				T2_off;T1_on;
			}	break;
			case 6: 
				count = 0;	break; 
			default: break; 
 	  	}
	}
} 

}[/code]

Tak to si ještě užiješ u ARMů. :laughing:

Hodlám zůstat zatím jenom u PICek.

Podle toho nastavení Timeru0 to mění stav na PORTuC po (20MHz/4 = 5MHz, 1/5MHz = 0,2us * 128 * 131 = 3,3536ms(cca 300Hz). Pak se ti může zdát že některá LED svítí trvale.Uprav to na cca 300 - 500ms.

to jsem asi napsal blbě s tím blikáním, to má měnit ty stavy po těch 3,3 ms, což na diodách není vidět. používám logický sondy. Už jsem na to přišel, mi to vynechávalo stav 0. Teď už by to mělo jet jak má.