Automatiserad elektrokemi Setup (3 / 5 steg)
Steg 3: kod
Det finns 2 variabler som jag vill att du ska titta på innan nästa steg, de är experimentet gånger (t_25, t_16, t_9, t_4 och t_1) och månadskapacitet på gånger (siffran i den första _delay_ms() kalla i varje for-loop)
Koden är skriven i Atmel Studio. För att ladda upp koden, använde jag avrdude. Båda är gratis. Använda avrdude, kan du ladda upp filen hex ingår insida den zip broschyren bifogas detta steg med följande rad i Kommandotolken efter du navigera till rätt mapp:
avrdude - c usbtiny -p t85 - U flash:w:rde2.hex
Genom att använda en arduino skulle göra detta mycket lättare men dyrare. På en arduino har du en AnalogWrite() funktion som skulle förenkla mycket av detta. Flödet skulle då bli AnalogWrite(voltage_desired) -> delay(experiment_time) -> Upprepa...
#include < avr/io.h >
#include < util/delay.h >
#define F_CPU 800000UL
float t_25, t_16, t_9, t_4, t_1; float typ är onödigt men jag har gott om minne
int main(void)
{
förinställda för 1V domän @ 5mV/s hastighet. Ändra om ditt experiment är olika.
t_25 = 207*207000/(2.1920*227); 207000 är experiment längden i millisekunder
T_16 = 207*207000/(1.5580*227); 207/227 är en kalibrering konstant
t_9 = 207*304000/(1.2585*227); 2.1920, 1.5580, etc är längderna hos de för loopar motsvarar den del av experimentet
t_4 = 207*304000/(1.1000*227);
t_1 = 207*304000/(1.0220*227);
Ställ in output pin
DDRB | = (1 << DDB0) | (1 << DDB1);
fast PWM-läge, wave formulärgenereringen bit [1:0]
TCCR0A = (1 << COM0A1) | (1 << WGM00) | (1 << WGM01);
vågform bitar [2], prescalar 1024
TCCR0B = (1 << WGM02) | (1 << CS02) | (1 << CS00);
output jämför registrera
OCR0A = 0;
för (flyta t = 0; t < t_25; t ++)
{
PORTB | = (1 << PB1);
_delay_ms(1.192); Detta definierar intermittensen och därmed analog spänning utdata
PORTB & = ~ (1 << PB1); ett större värde ger en större arbetscykel och därmed högre spänning
_delay_ms(1); 1 ms (utanför) försening väljs godtyckligt
}
för (flyta t = 0; t < t_16; t ++)
{
PORTB | = (1 << PB1);
_delay_ms(0.558);
PORTB & = ~ (1 << PB1);
_delay_ms(1);
}
för (flyta t = 0; t < t_9; t ++)
{
PORTB | = (1 << PB1);
_delay_ms((0.2585));
PORTB & = ~ (1 << PB1);
_delay_ms(1);
}
för (flyta t = 0; t < t_4; t ++)
{
PORTB | = (1 << PB1);
_delay_ms(0.1);
PORTB & = ~ (1 << PB1);
_delay_ms(1);
}
för (flyta t = 0; t < t_1; t ++)
{
PORTB | = (1 << PB1);
_delay_ms(0.022);
PORTB & = ~ (1 << PB1);
_delay_ms(1);
}
While(1) / / slutet staten
{
PORTB | = (1 << PB1);
_delay_ms(0);
PORTB & = ~ (1 << PB1);
_delay_ms(600000); 10 minuter för att undvika buller på raden
}
}