Ir ao conteúdo
  • Cadastre-se

PIC Codigo "C" Spwm para PIC12F675 Onda Senoide


Visitante

Posts recomendados

alguém ja escreveu um codigo que funcione corretamente ?

 

Propósito do codigo :

 

PARA : PIC12F675 

 

- Gerar 2 sinais iguais em amplitude , tensão e frequência E defasados em 180º um do outro, sinais estes sendo do tipo = SPWM 

- Ter um Pino para receber uma amostra de tensão ( será o feedback ) de aproximadamente 12v a 15v

- Tentei escrever alguma coisa ( porém sou praticamente leigo nisso mais entendo de logica ) por isso resolvi tentar 

 

CODIGO QUE ESCREVI :

 

#include <pic16f675.h>

// Configurações do OSCILLATOR
#pragma config FOSC = INTRCIO, WDTE = OFF, PWRTE = ON, MCLRE = OFF, BOREN = OFF, CP = OFF, CPD = OFF

void main()
{
    TRISIO = 0; // Define todos os pinos do PORTA como saída
    
    unsigned int dutyCycle = 512; // Define o duty cycle do sinal de saída
    
    while (1) {
        // Gera sinal de saída no pino GP0
        for (int i = 0; i < 256; i++) {
            if (i < dutyCycle) {
                GPIObits.GP0 = 0;
            } else {
                GPIObits.GP0 = 1;
            }
        }
        
        // Gera sinal de saída defasado em 180 graus no pino GP1
        for (int i = 0; i < 286; i++) {
            if (i < 256 - dutyCycle) {
                GPIObits.GP1 = 0;
            } else {
                GPIObits.GP1 = 1;
            }
        }
        
        // Atualiza o duty cycle do sinal de saída
        dutyCycle+;
        if (dutyCycle >= 1068) {
            dutyCycle = 1;
        }

 

porém quando vou tentar compila-lo ( compilador sendo usado : MPLAB IDE ) me retorna vários Erros 

Alguém ai pra me da uns help´s ?

 

Endel Neiva 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Sua lógica tem algo de correto. Mas observe ...

1 hora atrás, endrinho disse:

unsigned int dutyCycle = 512; // Define o duty cycle do sinal de saída
    
    while (1) {
        // Gera sinal de saída no pino GP0
        for (int i = 0; i < 256; i++) {
            if (i < dutyCycle) {
                GPIObits.GP0 = 0;
            } else {
                GPIObits.GP0 = 1;
            }
        }

.. que i nunca vai ser > 256 ou seja, sempre vai ser < 512....

+ alguns detalhes que noto:

1 hora atrás, endrinho disse:

for (int i = 0; i < 286; i++) {

1 hora atrás, endrinho disse:

if (dutyCycle >= 1068) {

286 e 1068 não são compatíveis com base 2 binária.. detalhe bobo mas pode "distorcer o tempo" quebrando a simetria binária... (off.. agora há pouco estava a meditar sobre a redução do tempo e espaço num buraco negro.. sério)

 

Permita-me mais uma vez mais uma visão prática...Pra defasar em 180º algo como

GPIObits.GP1=!GPIObits.GP0;

tem algo pra funcionar. Sendo assim (ou assim sendo) basta você controlar o tempo duty de um pino só.

 

1 hora atrás, endrinho disse:

MPLAB IDE ) me retorna vários Erros 

O que impede de mencioná-los?

Link para o comentário
Compartilhar em outros sites

16 horas atrás, .if disse:

Sua lógica tem algo de correto. Mas observe ...

.. que i nunca vai ser > 256 ou seja, sempre vai ser < 512....

+ alguns detalhes que noto:

286 e 1068 não são compatíveis com base 2 binária.. detalhe bobo mas pode "distorcer o tempo" quebrando a simetria binária... (off.. agora há pouco estava a meditar sobre a redução do tempo e espaço num buraco negro.. sério)

 

Permita-me mais uma vez mais uma visão prática...Pra defasar em 180º algo como

GPIObits.GP1=!GPIObits.GP0;

tem algo pra funcionar. Sendo assim (ou assim sendo) basta você controlar o tempo duty de um pino só.

 

O que impede de mencioná-los?

obrigado pelo retorno, você poderia escrever o codigo da maneira correta pra mim por favor 

pois como disse, estou iniciando neste mundo fantastico , porém ainda sei pouco sobre 

 

- funções 

- eventos 

- declarações

e onde colocar cada parâmetros de forma correta 

@.if o PIC que estou usando é o PIC12F675

Estou estudando seu datasheet no momento , para aprender mais sobre este Microcontrolador

porém meu conhecimento ( não tenho vergonha de dizer ) ainda é pouco para conseguir escrever 

 

este codigo corretamente 

 

quero montar um INVERSOR DC/AC de onda senoidal pura 

 

sei que preciso de :

 

- 1 amostragem : onda senoidal pura de 60hz ( referencia ) 

- 1 dente triângular com pelo menos 4mhz ( portadora ) 

- Sei que o PIC consegue programado adequadamente , criar tudo isso 

- porém pra que o PIC faça isso , entregue em dois de seus pinos de saída 

DOIS SINAIS IGUAIS DEFASADOS SPWM 

o codigo precisa estar correto, e é nisso que estou tendo certa dificuldade 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
7 horas atrás, endrinho disse:

1 dente triângular com pelo menos 4mhz ( portadora ) 

Mesmo com seus 20Mhz penso que ele vai ter dificuldade neste quesito e ... bem...

Mas se não se importa, eu acho que o amigo está queimando etapas. Comece o hello world pisca led. .. Penso que a qualquer momento você vai perceber que um chip que já possua função pwm no seu hw é uma opção melhor.

Caso insista no 675, faça um pwm com 1 canal só. você está no caminho certo... Ainda não li sobre os erros do seu IDE

Ah e isso...

Em 09/03/2023 às 07:38, .if disse:

Pra defasar em 180º algo como

GPIObits.GP1=!GPIObits.GP0;

.. defasa mas apenas inverte e não leva o controle pwm pro outro canal.. falha nossa 🥴
 

Link para o comentário
Compartilhar em outros sites

ja fiz este projeto hellow word

43 minutos atrás, .if disse:

Mesmo com seus 20Mhz penso que ele vai ter dificuldade neste quesito e ... bem...

Mas se não se importa, eu acho que o amigo está queimando etapas. Comece o hello world pisca led. .. Penso que a qualquer momento você vai perceber que um chip que já possua função pwm no seu hw é uma opção melhor.

Caso insista no 675, faça um pwm com 1 canal só. você está no caminho certo... Ainda não li sobre os erros do seu IDE

Ah e isso...

.. defasa mas apenas inverte e não leva o controle pwm pro outro canal.. falha nossa 🥴
 

e como eu faria pra defasar de forma correta então ? você sabe .......

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
Em 10/03/2023 às 08:31, endrinho disse:

pra defasar de forma correta então ? você sabe .......

Posso chutar... primeiro faça com um só, teste e o domine completamente, ok? Pra gerar a outra fase é quase bem simples: inverta um bit a cada passada pela iteração. Se 0, controla um pino, se 1 um outro.

Algo como um semi pseudo código:
 

static bit b;

while (1) {
    if (b)	{  
			GPIObits.GP1 = 0; //zera outro canal
			// Gera sinal de saída no pino GP0
        	for (int i = 0; i < 256; i++) 
				{
            	if (i < dutyCycle) 	GPIObits.GP0 = 0;
            	else 				GPIObits.GP0 = 1;
            	}
			}
	else	{
			GPIObits.GP0 = 0; //zera outro canal
			// Gera sinal de saída no pino GP0
        	for (int i = 0; i < 256; i++) 
				{
            	if (i < dutyCycle) 	GPIObits.GP1 = 0;
            	else 				GPIObits.GP1 = 1;
            	}
			}
b^=1; //na próxima passada controle o outro pino
        }

 

Tá feio mas to com preguiça de ajustar

Link para o comentário
Compartilhar em outros sites

13 horas atrás, .if disse:

Posso chutar... primeiro faça com um só, teste e o domine completamente, ok? Pra gerar a outra fase é quase bem simples: inverta um bit a cada passada pela iteração. Se 0, controla um pino, se 1 um outro.

Algo como um semi pseudo código:
 

static bit b;

while (1) {
    if (b)	{  
			GPIObits.GP1 = 0; //zera outro canal
			// Gera sinal de saída no pino GP0
        	for (int i = 0; i < 256; i++) 
				{
            	if (i < dutyCycle) 	GPIObits.GP0 = 0;
            	else 				GPIObits.GP0 = 1;
            	}
			}
	else	{
			GPIObits.GP0 = 0; //zera outro canal
			// Gera sinal de saída no pino GP0
        	for (int i = 0; i < 256; i++) 
				{
            	if (i < dutyCycle) 	GPIObits.GP1 = 0;
            	else 				GPIObits.GP1 = 1;
            	}
			}
b^=1; //na próxima passada controle o outro pino
        }

 

Tá feio mas to com preguiça de ajustar

eu vou compilar e testar aqui ......... dou retorno 

13 horas atrás, .if disse:

Posso chutar... primeiro faça com um só, teste e o domine completamente, ok? Pra gerar a outra fase é quase bem simples: inverta um bit a cada passada pela iteração. Se 0, controla um pino, se 1 um outro.

Algo como um semi pseudo código:
 

static bit b;

while (1) {
    if (b)	{  
			GPIObits.GP1 = 0; //zera outro canal
			// Gera sinal de saída no pino GP0
        	for (int i = 0; i < 256; i++) 
				{
            	if (i < dutyCycle) 	GPIObits.GP0 = 0;
            	else 				GPIObits.GP0 = 1;
            	}
			}
	else	{
			GPIObits.GP0 = 0; //zera outro canal
			// Gera sinal de saída no pino GP0
        	for (int i = 0; i < 256; i++) 
				{
            	if (i < dutyCycle) 	GPIObits.GP1 = 0;
            	else 				GPIObits.GP1 = 1;
            	}
			}
b^=1; //na próxima passada controle o outro pino
        }

 

Tá feio mas to com preguiça de ajustar

kkkkkkk mais eu achei meio pequeno pra fazer o que tem que fazer 

 

mais afinal o que tem que ser feito ?

 

R:

- gerar em um pino um sinal spwm ( é spwm e não pwm ) 

- gerar em outro pino o mesmo sinal , porém defasado este do ultimo 

 

problema da programação PIC , é que se leva anos séculos para se dominar isso 

to tentando fazer a IA escrever esse codigo pra mim , mas ela não escreve o codigo todo 

então não resolve nada né 

 

 

 

 

 

 

 

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
9 horas atrás, endrinho disse:

se leva anos séculos para se dominar isso 

De fato. Às décadas que possuo somei alguns minutos... Me deu vontade testar😁

https://i.imgur.com/nU7dJk1.mp4 (clique)

 

Compilou e rodou no https://www.microchip.com/en-us/tools-resources/develop/mplab-xpress

Cadastre-se para compilar... é gratuito.

Anexo o .zip pwm2.zip se interessar. Salve e import nas opções file do programa. Pra fazer um spwm coloque uma tabela de senos. Algo como dutyCycle=tabela_seno[i]. Permita-me não fazer pra você ok?

 

9 horas atrás, endrinho disse:

fazer a IA escrever esse codigo pra mim , mas ela não escreve o codigo todo 

então não resolve nada né 

Só ouvi falar sobre. Nunca testei. Mostre como fez, que dados entrou e que dados a IA te retornou. curiosidade apenas.

 

Em 10/03/2023 às 00:33, endrinho disse:

montar um INVERSOR DC/AC de onda senoidal pura

Acho que é melhor com um hw dedicado. Não sei se este mc tem recursos pra isso

Link para o comentário
Compartilhar em outros sites

11 horas atrás, .if disse:

De fato. Às décadas que possuo somei alguns minutos... Me deu vontade testar😁

https://i.imgur.com/nU7dJk1.mp4 (clique)

 

Compilou e rodou no https://www.microchip.com/en-us/tools-resources/develop/mplab-xpress

Cadastre-se para compilar... é gratuito.

Anexo o .zip pwm2.zip se interessar. Salve e import nas opções file do programa. Pra fazer um spwm coloque uma tabela de senos. Algo como dutyCycle=tabela_seno[i]. Permita-me não fazer pra você ok?

 

Só ouvi falar sobre. Nunca testei. Mostre como fez, que dados entrou e que dados a IA te retornou. curiosidade apenas.

 

Acho que é melhor com um hw dedicado. Não sei se este mc tem recursos pra isso

sim kkkkkkk permito , pois é somente um norte mesmo que eu precisava , obrigado 

daqui pra frente eu vou tentar cria-lo como se diz por ai " na unha " 

 

você ( dentro de sua experiência ) acha que o melhor programa para eu escrever códigos 

para microcontroladores PIC , seria qual :

 

- mikroC

- Mplab

- VisualStudio vs Code 

 

?????????????

permita-me lhe fazer está ultima pergunta kk

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
2 horas atrás, endrinho disse:

acha que o melhor programa para eu escrever códigos 

para microcontroladores PIC

..é aquele o qual você se acha nele. Num 1º momento o que mais conta é o visual da interface (IDE) e suas facilitações como p.ex. códigos com cores, complementação de código e etc. Num 2º são as bibliotecas prontas que não te fazer perder tempo com o estudo do hw do mc - p.ex. a linha arduina tem quase tudo pronto. Num 3º já começa subir o nível de exigência mas melhorar o desempenho: um compilador que te gere o menor uso de memória e compile um fonte c que deixa o .hex do mesmo tamanho que se feito em assembly... Sim, existe mas tem seu preço.

Aquele que te recomendei (mplab xpress) é gratuito, não precisa instalar nada e funciona direitinho.. você viu vídeo.. acho. Mas se quiser instalar tem até pra linux.

Link para o comentário
Compartilhar em outros sites

// Definindo os pinos do PIC
#define SPWM_PIN_1 RB1
#define SPWM_PIN_2 RB2
#define GATE_PIN_1 RA0
#define GATE_PIN_2 RA1
#define GATE_PIN_3 RA2
#define GATE_PIN_4 RA3

// Definindo as constantes
#define FREQ 60 // Frequência da saída
#define VPP 127 // Amplitude da tensão
#define VOFFSET 2.5 // Tensão de offset
#define SAMPLES 256 // Número de amostras

// Variáveis globais
unsigned int sineWave1[SAMPLES]; // Armazenamento dos valores das amostras do primeiro sinal SPWM
unsigned int sineWave2[SAMPLES]; // Armazenamento dos valores das amostras das amostras do segundo sinal SPWM
unsigned int pwmValue1 = 0; // Valor do ciclo de trabalho do primeiro sinal SPWM
unsigned int pwmValue2 = 0; // Valor do ciclo de trabalho do segundo sinal SPWM

// Função para inicialização dos valores da onda senoidal
void initSineWave() {
for(int i=0; i<SAMPLES; i++) {
sineWave1[i] = (unsigned int) ((VPP / 2) * (1 + sin(2 * 3.14 * i / SAMPLES)));
sineWave2[i] = (unsigned int) ((VPP / 2) * (1 + sin(2 * 3.14 * i / SAMPLES)));
}
}

// Função para geração dos sinais SPWM
void generateSPWM() {
if(pwmValue1 <= sineWave1[SPWM_PIN_1]) {
SPWM_PIN_1 = 1;
} else {
SPWM_PIN_1 = 0;
}

if(pwmValue2 <= sineWave2[SAMPLES - SPWM_PIN_2 - 1]) {
SPWM_PIN_2 = 1;
} else {
SPWM_PIN_2 = 0;
}

pwmValue1++;
pwmValue2++;

if(pwmValue1 >= SAMPLES) {
pwmValue1 = 0;
}

if(pwmValue2 >= SAMPLES) {
pwmValue2 = 0;
}
}

// Função para controle das saídas de gate dos MOSFETs
void controlGatePins(int diff) {
if(diff > 0) {
GATE_PIN_1 = 1;
GATE_PIN_2 = 0;
GATE_PIN_3 = 1;
GATE_PIN_4 = 0;
} else {
GATE_PIN_1 = 0;
GATE_PIN_2 = 1;
GATE_PIN_3 = 0;
GATE_PIN_4 = 1;
}
}

// Função principal
int main() {
TRISA0 = 0; // Configurando o pino RA0 como saída
TRISA1 = 0; // Configurando o pino RA1 como saída
TRISA2 = 0; // Configurando o pino RA2 como saída
TRISA3 = 0; // Configurando o pino RA3 como saída
TRISB1 = 0; // Configurando o pino RB1 como saída
TRISB2 = 0; // Configurando o pino RB2 como saída

// Inicialização dos valores da onda senoidal
initSineWave();

// Loop principal
while(1) {
generateSPWM(); // Geração dos sinais SPWM
controlGatePins(pwmValue1 - pwmValue2); // Controle das saídas de gate dos MOSFETs
}
return 0;
}

 

Eu gostaria de que alguém ENTENDIDO NO ASSUNTO , corrigisse este codigo meu 

pois o mesmo não quer compilar de jeito nenhum no MPLAB , help ?

Link para o comentário
Compartilhar em outros sites

Em 20/03/2023 às 22:44, aphawk disse:

@endrinho ,

 

Não entendo patavina dessa linguagem, mas uma coisa eu sei ....

Sem os detalhes do hardware utilizado nenhum compilador vai compilar mesmo .....

 

Paulo

 

ja tentei com 3 PIC´S diferentes, e mesmo assim não compila de jeito nenhum 

 

- PIC16F628A

- PIC12F84A

- PIC 16F877A

 

agora voltei meu FOCO apenas para p 16F628A

Então estou estudando este PIC em especial , porém não faço ideia do que seja detalhes de 

HARDWARE , você pode explicar de forma mais detalhada pra mim o que seria isso ?

Link para o comentário
Compartilhar em outros sites

@endrinho ,

 

Primeiro você tem de colocar no código fonte qual é PIC que você vai usar, tem de colocar também a frequência de clock que ele vai rodar, tem de incluir algumas libraries como as funções padrão de I/O da família do PIC. Depois disso tem de adequar toda a sintaxe do seu código para o compilador que você for usar.

 

Vi nas declarações do seu código que você quer gerar 60 Hz, mas não vi você utilizar isso para gerar o sinal SPWM, então seu código está errado.

 

Não programo em C e nem nas suas variações, então não consigo te ajudar mais do que isso.

 

Paulo

 

 

Link para o comentário
Compartilhar em outros sites

11 minutos atrás, aphawk disse:

@endrinho ,

 

Primeiro você tem de colocar no código fonte qual é PIC que você vai usar, tem de colocar também a frequência de clock que ele vai rodar, tem de incluir algumas libraries como as funções padrão de I/O da família do PIC. Depois disso tem de adequar toda a sintaxe do seu código para o compilador que você for usar.

 

Vi nas declarações do seu código que você quer gerar 60 Hz, mas não vi você utilizar isso para gerar o sinal SPWM, então seu código está errado.

 

Não programo em C e nem nas suas variações, então não consigo te ajudar mais do que isso.

 

Paulo

 

 

e como eu faço isso ?

A teoria eu tb ja aprendi ..... o que eu não sei é a prática 

Link para o comentário
Compartilhar em outros sites

19 horas atrás, aphawk disse:

@endrinho ,

 

Se eu soubesse eu não teria dito que não entendo patavina nenhuma dessa linguagem kkkkkkkk

 

Sugiro você começar por aqui para aprender a programar :

 

https://www.homemade-circuits.com/arduino-spwm-generator-circuit/

 

Paulo

E você tb usa estes link´s que manda pra gente para aprender kkkkkkkkkkkkk

19 horas atrás, aphawk disse:

@endrinho ,

 

Se eu soubesse eu não teria dito que não entendo patavina nenhuma dessa linguagem kkkkkkkk

 

Sugiro você começar por aqui para aprender a programar :

 

https://www.homemade-circuits.com/arduino-spwm-generator-circuit/

 

Paulo

eu não gosto de Arduino, por tanto não quero aprender nada sobre isso .

Link para o comentário
Compartilhar em outros sites

4 horas atrás, endrinho disse:

E você tb usa estes link´s que manda pra gente para aprender kkkkkkkkkkkkk

 

A melhor maneira nunca foi dar o peixe, e sim ensinar a Pescar, é o que eu tento fazer desde que entrei aqui no CDH !

 

4 horas atrás, endrinho disse:

eu não gosto de Arduino, por tanto não quero aprender nada sobre isso

 

Deveria rever seus conceitos, meu amigo ..... Você compra um simples Arduino Nano por uma bagatela, já vem prontinho, e você imediatamente tem acesso a uma base de programas prontos fantástica, que deve superar em mais de 10 vezes tudo o que existe para todos os outros microcontroladores, sejam Pic, sejam ESP, sejam Arms, não existe nada melhor para você aprender.

 

Eu faço TODOS meus projetos com um Arduino Nano montado na minha PCB, que cuida de todo o hardware, me facilita demais a programação e o debug usando o Proteus VSM.

 

Mas não uso a linguagem C, nem a dos Arduino, eu programo tudo em Basic mesmo e quando necessário utilizo Assembly junto. Sou velho demais para aprender truques novos .....

 

Você disse que já tem a teoria, mas me pergunta sobre o hardware dos microntroladores ... então eu posso dizer que você não tem nem 10% da teoria básica para fazer um projeto desse tipo que você está querendo, pois não percebe o que vai acontecer no seu hardware usando esse programa que você postou aqui por ultimo....

 

Quando você fala em usar frequências de 4 MHz ou mais em seu SPWM, eu já notei que você ainda não tem o domínio nem da técnica PWM, e nem da SPWM, pois o seu código mostra que você não inicializou o hardware para fazer tal procedimento. E nem sabe sobre qual frequência utilizar no seu SPWM e as consequências .... e nem sobre dead-time, que será muito necessário para uso em altas potências como a que você se propõe.

 

Eu te passei um link bem interessante, onde o autor explica o que tá fazendo, mostra como ele contornou o dead-time, e você pode aprender e usar a mesma técnica com um Pic se quiser. Não o ignore por "não gosto de Arduino" , é para o SEU aprendizado !

 

Vá por mim ..... aprenda com os Arduinos, e depois caso você queira virar um profissional, pode aprender com outras famílias mais potentes, como um ESP ou ESP-32, que te dão um baita processamento e recursos de sobra por uma ninharia.

 

Paulo

 

 

Link para o comentário
Compartilhar em outros sites

Em 23/03/2023 às 09:40, aphawk disse:

 

Deveria rever seus conceitos, meu amigo ..... Você compra um simples Arduino Nano por uma bagatela, já vem prontinho, e você imediatamente tem acesso a uma base de programas prontos fantástica, que deve superar em mais de 10 vezes tudo o que existe para todos os outros microcontroladores, sejam Pic, sejam ESP, sejam Arms, não existe nada melhor para você aprender.

 

 

Outro dia um colega queria fazer um projeto simples de piscar led. Tinhas umas restrições e acabamos sugerindo um arduíno pequeno mesmo sabendo que era demais. 

 

Quando fui ver, tem kit pronto no Aliexpress pro 10 reais. Tipo. Faz o básico, tem umas portinhas e tal....

 

O ponto que quero chegar é que o negócio evoluiu tanto que tá tão mais simples de aprender hj que eu não mexeria com PIC mais não.

 

No caso desse meu colega, ele comprou um Attiny85. Achei legal demais a proposta.

 

Link para o comentário
Compartilhar em outros sites

@MatheusLPS ,

 

Esse Attiny85 é muito legal, e tem gente que coloca dentro um bootloader do Arduino e roda direitinho !

 

Mas ainda prefiro o Arduino Nano, os novos já vem com o Atmega328PB, que é compatível com o velho Atmega328P e ainda acrescenta mais uma porta serial e outros Timers. E tem um regulador de tensão que permite alimentar com 12V e tem uma interface USB, tudo numa plaquinha bem pequena. Pelo preço na faixa de 45 reais, é um excelente investimento para aprendizado.

 

Paulo

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Ganhei agora há pouco um kit de um mc que roda python diretamente. Suponho ter um interpretador.  Não é nenhum destes:

https://docs.arduino.cc/learn/programming/arduino-and-python

mas é da sua família e tem um mc que custa U$1,00 na digikey. Ele tem várias portas i2c e uma delas é usada pra memória flash que ser até 16MB. Mas custou barato d+ da conta. A qualquer momento eu vejo qual é. Tá aqui mas não lembro onde coloquei. Pena que esta linguagem não vai com minha cara. 😁

 

Ia atualizar mas deu vontade editar. É raspberry

https://www.digikey.com/short/v3pq1qwm

U$0,70

Tá certo que precisa de periféricos adicionais mas...clique... mas.. tão metendo a faca no frete

 

 

Link para o comentário
Compartilhar em outros sites

Em 11/03/2023 às 22:57, .if disse:

Posso chutar... primeiro faça com um só, teste e o domine completamente, ok? Pra gerar a outra fase é quase bem simples: inverta um bit a cada passada pela iteração. Se 0, controla um pino, se 1 um outro.

Algo como um semi pseudo código:
 

static bit b;

while (1) {
    if (b)	{  
			GPIObits.GP1 = 0; //zera outro canal
			// Gera sinal de saída no pino GP0
        	for (int i = 0; i < 256; i++) 
				{
            	if (i < dutyCycle) 	GPIObits.GP0 = 0;
            	else 				GPIObits.GP0 = 1;
            	}
			}
	else	{
			GPIObits.GP0 = 0; //zera outro canal
			// Gera sinal de saída no pino GP0
        	for (int i = 0; i < 256; i++) 
				{
            	if (i < dutyCycle) 	GPIObits.GP1 = 0;
            	else 				GPIObits.GP1 = 1;
            	}
			}
b^=1; //na próxima passada controle o outro pino
        }

 

Tá feio mas to com preguiça de ajustar

........... se eu compilar esta fase somente , será que daria certo ?

static bit b;

 

está instrução , o que exatamente ela faz ?

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
42 minutos atrás, endrinho disse:

está instrução , o que exatamente ela faz ?

Apenas pre-define uma variável como tipo bit. Algo como aloca ou separa um pedacinho da memória só pra ela. Bit é o menor pedaço possível pra eletronica digital e computacional... caso você não saiba, agora sabe. 

Você pode pesquisar no seu compilador como é definida tal variável. Alguns preferem boolean, bool ou algo assim. Mas de novo, tente então

unsigned char b;

Pra ver que merdadá...

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!