Stap 3: Code
Er zijn 2 variabelen die ik wil dat je om naar te kijken voordat naar de volgende stap, die het experiment tijden (t_25, t_16, t_9, t_4 en t_1 zijn) en de taakcyclus op keer (het getal in de eerste _delay_ms() noemen in elke lus)
De code is geschreven in Atmel Studio. Ik gebruikte voor het uploaden van de code, avrdude. Beide zijn gratis. Met avrdude, kunt u het hex bestand opgenomen in de map van de zip gekoppeld aan deze stap met behulp van de volgende regel in de opdrachtprompt nadat u naar de juiste map navigeren uploaden:
avrdude - c usbtiny -p t85 - U flash:w:rde2.hex
Met behulp van een arduino zou dit een stuk eenvoudiger maar duurder maken. Op een arduino hebt u een AnalogWrite()-functie die een heleboel dit zou vereenvoudigen. De stroom zou vervolgens worden AnalogWrite(voltage_desired) -> delay(experiment_time) -> herhalen...
#include < avr/io.h >
#include < util/delay.h >
#define F_CPU 800000UL
float-t_25, t_16, t_9, t_4, t_1; float type is niet nodig maar ik heb genoeg van geheugen
int main(void)
{
vooraf ingesteld voor 1V domein @ 5mV/s snelheid. Wijzigen als uw experiment anders is.
t_25 = 207*207000/(2.1920*227); 207000 is de lengte van het experiment in milliseconden
t_16 = 207*207000/(1.5580*227); 207/227 is een kalibratie-constante
t_9 = 207*304000/(1.2585*227); 2.1920, 1.5580, etc zijn de lengtes van de for-lussen overeenkomt met dat deel van het experiment
t_4 = 207*304000/(1.1000*227);
t_1 = 207*304000/(1.0220*227);
set uitgang pins
DDRB | = (1 << DDB0) | (1 << DDB1);
Fast PWM-modus, Golf formulier generatie bit [1:0]
TCCR0A = (1 << COM0A1) | (1 << WGM00) | (1 << WGM01);
golfvorm bits [2], prescalar 1024
TCCR0B = (1 << WGM02) | (1 << CS02) | (1 << CS00);
vergelijken van de output registreren
OCR0A = 0;
voor (zweven t = 0; t < t_25; t ++)
{
PORTB | = (1 << PB1);
_delay_ms(1.192); Dit bepaalt het pulserend sproeien en daarmee de spanning van de analoge uitgang
PORTB & = ~ (1 << PB1); een hogere waarde geeft een grotere taakcyclus en dus hogere spanning
_delay_ms(1); de 1 ms (uitgeschakeld) vertraging wordt willekeurig gekozen
}
voor (zweven t = 0; t < t_16; t ++)
{
PORTB | = (1 << PB1);
_delay_ms(0.558);
PORTB & = ~ (1 << PB1);
_delay_ms(1);
}
voor (zweven t = 0; t < t_9; t ++)
{
PORTB | = (1 << PB1);
_delay_ms((0.2585));
PORTB & = ~ (1 << PB1);
_delay_ms(1);
}
voor (zweven t = 0; t < t_4; t ++)
{
PORTB | = (1 << PB1);
_delay_ms(0.1);
PORTB & = ~ (1 << PB1);
_delay_ms(1);
}
voor (zweven t = 0; t < t_1; t ++)
{
PORTB | = (1 << PB1);
_delay_ms(0.022);
PORTB & = ~ (1 << PB1);
_delay_ms(1);
}
while(1) / / end staat
{
PORTB | = (1 << PB1);
_delay_ms(0);
PORTB & = ~ (1 << PB1);
_delay_ms(600000); 10 minuten om te voorkomen dat ruis op de lijn
}
}