Yes but i measured it and i am getting only 1v
How did you do this? Scope? You can’t measure pwm output accurately with a multimeter.
it also says about what you have mentioned about the writerange and frequency , and there the ADC voltage is 0-1v .
You are confusing output with analogWrite() and input with analogRead()
And can you please help me understand this !! PLease ! I am a Newbie…
OCR1A = map(instelwaarde, 0, 1023, 65, 2);
In this linked code the value of OCR1A sets the delay from zero cross interrupt to the triac trigger for dimming. The value of OCR1A is being adjusted with a mapped analogVoltage reading.
// Voltage controlled dimmer with ATtiny85
//
// This arduino sketch includes a zero
// crossing detect function and an opto-isolated triac.
//
// AC Phase control is accomplished using the internal
// hardware timer1 in the ATtiny85
//
// Timing Sequence
// * timer is set up but disabled
// * zero crossing detected
// * timer starts counting from zero
// * comparator set to "delay to on" value
// * counter reaches comparator value
// * comparator ISR turns on triac gate
// * counter set to overflow - pulse width
// * counter reaches overflow
// * overflow ISR turns off triac gate
// * triac stops conducting at next zero cross
// The hardware timer runs at 8MHz.
// A half period of a 50Hz AC signal takes 10 ms is 80000 counts.
// Prescaler set to 1024 gives 78 counts per half period
#include <avr/io.h>
#include <avr/interrupt.h>
#define DETECT 2 //zero cross detect, interrupt 0, is physical pin 7
#define GATE 3 //triac gate is physical pin 2
#define PULSE 2 //trigger pulse width (counts)
#define INSTELPIN 2 // =A2 (digital pin4) is physical pin 3
void setup(){
// set up pins
pinMode(DETECT, INPUT); //zero cross detect
digitalWrite(DETECT, HIGH); //enable pull-up resistor
pinMode(GATE, OUTPUT); //triac gate control
// set up Timer1
TCCR1 = 0; // stop timer
OCR1A = 50; //initialize the comparator
TIMSK = _BV(OCIE1A) | _BV(TOIE1); //interrupt on Compare Match A | enable timer overflow interrupt
sei(); // enable interrupts
// set up zero crossing interrupt
attachInterrupt(0,zeroCrossingInterrupt, FALLING);
}
//Interrupt Service Routines
void zeroCrossingInterrupt(){
TCNT1 = 0; //reset timer - count from zero
TCCR1 = B00001011; // prescaler on 1024, see table 12.5 of the tiny85 datasheet
}
ISR(TIMER1_COMPA_vect){ //comparator match
digitalWrite(GATE,HIGH); //set triac gate to high
TCNT1 = 255-PULSE; //trigger pulse width, when TCNT1=255 timer1 overflows
}
ISR(TIMER1_OVF_vect){ //timer1 overflow
digitalWrite(GATE,LOW); //turn off triac gate
TCCR1 = 0; //disable timer stop unintended triggers
}
void loop(){ // use analog input to set the dimmer
int instelwaarde = analogRead(INSTELPIN);
OCR1A = map(instelwaarde, 0, 1023, 65, 2);
}
Change loop() to the code to sweep the through the range of OCR1A to test the dimming output and validate the output circuit.
void loop() {
const int interval = 1000;
static unsigned long lastMillis;
static byte timerDelay = 2;
static byte timerDelayChange = 1;
if (millis() - lastMillis >= interval)
{
lastMillis = millis();
if (timerDelay == 2)
timerDelayChange = 1;
else if (timerDelay == 65)
timerDelayChange = -1;
timerDelay += timerDelayChange;
OCR1A = timerDelay;
//Serial.println(OCR1A);
}
}
and also the RC filter you mentioned above. So that i can build and try …
Its a request.
Please Google “low pass filter Arduino pwm”.
You will not be able to get 5v from the 3.3v Node mcu without additional hardware to amplify the output.
Alernativly, you might try an mcp4725 module DAC