Hallo,
ich hab die Temperatursteuerung von Thomas Pfeifer (Reflow Ofen)
nachgebaut und den atmega8 mit der Software gebrannt. Das Funktioniert
auch so weit.
Nur bei der Temperaturmessung habe ich das Problem, das am Meßeingang
eine Spannungsdifferenz von ca. 0,5V habe, je nachdem ob der die
Ausgänge am PORTD 0 oder 1 haben.
Das bedeutet wenn PORTD = 0b00000000 habe ich am Meßeingang PC0 einen
Spannungsunterschied von 0,5V als wenn PORTD = 0b11100000.
Ich hab keine Ahnung warum...
Hier mal ein kleiner Auszug aus dem Quellcode:
Messung:
1 | void adcinit() {
|
2 | // Activate ADC with Prescaler 16 --> 1Mhz/16 = 62.5kHz
|
3 | //ADCSRA = _BV(ADEN) | _BV(ADPS2);
|
4 | ADCSRA = _BV(ADEN) | _BV(ADPS2) | _BV(ADPS1);
|
5 | ADMUX= 0;
|
6 | }
|
7 |
|
8 | int getadc(uint8_t channel) {
|
9 | // Select pin ADC0 using MUX
|
10 | ADMUX = channel | _BV(REFS0) | _BV(REFS1);
|
11 |
|
12 | //Start conversion
|
13 | ADCSRA |= _BV(ADSC);
|
14 |
|
15 | // wait until converstion completed
|
16 | while (ADCSRA & _BV(ADSC) ) {}
|
17 |
|
18 | // get converted value
|
19 | return(ADCW);
|
20 | }
|
Regelung:
1 | void control(int t_ist, int t_soll) {
|
2 | if (t_ist>t_soll) {
|
3 | PORTD = 0b00000000; //off
|
4 | } else {
|
5 | PORTD = 0b11100000; //on
|
6 | }
|
7 | }
|
Es gibt sicherlich eingie die die Schaltung auch nachgebaut haben.
Viele Grüße
Volker