hallo habe nen atmega8535 und 16 led s an den porten c und d angeschlossen eine variable spannung über ein poti ein ausgang +5volt bzw gnd schleifer zum atmel AD eingäng lasse nun den code den ad auslesen und je nach wert auf die ports verteilt ausgeben wie ein spannungsmessgerät.. nun hab ich nur folgendes problem mit dem poti klappt das ja wunderbar aber sobalkd 0 volt am ad anliegen leuchten alle leds und 5 volt keine also genau verkehrt herum wie ich es eigentlich wollte was mach ich da ? anbei n code schnipsel ! #include <mega8535.h> #include <stdio.h> #define ADC_VREF_TYPE 0x40 unsigned int read_adc(unsigned char adc_input) { ADMUX=adc_input|ADC_VREF_TYPE; // Start the AD conversion ADCSRA|=0x40; // Wait for the AD conversion to complete while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; return ADCW; } void Ausgabe(unsigned int Wert) { char c=0; char d=0; if (Wert>=128) d=1; if (Wert>=142) d=d+2; if (Wert>=163) d=d+4; if (Wert>=178) d=d+8; if (Wert>=204) d=d+16; if (Wert>=229) d=d+32; if (Wert>=256) d=d+64; if (Wert>=286) d=d+128; if (Wert>=321) c=c+1; if (Wert>=363) c=c+2; if (Wert>=403) c=c+4; if (Wert>=455) c=c+8; if (Wert>=511) c=c+16; if (Wert>=572) c=c+32; if (Wert>=644) c=c+64; if (Wert>=721) c=c+128; PORTC=c; PORTD=d; }
Ne LED leuchtet wenn du die mit Logic "0" ansteuertst. Wenn deine Schaltung so Aussieht: 5V--> Widerstand --> LED --> PortPin am µC Du musst also den Port auf 0xFF setzten und subtrahieren, oder dein Outputbyte mit invertieren mit exklusiv-oder mit 0xff. MfG Sebastian
kommt drauf an, wie du die Leds angeschlossen hast - meist schliesst man die vom Port gegen +5V an, dementsprechend leuchten sie, wenn der Port 0 ist.
nun hat mir jemand in nem anderen forum das geraten d= 255 d= 255 if (Wert>=128) d=d-1; if (Wert>=142) d=d-2; if (Wert>=163) d=d-4; if (Wert>=178) d=d-8; if (Wert>=204) d=d-16; if (Wert>=229) d=d-32; if (Wert>=256) d=d-64; if (Wert>=286) d=d-128; if (Wert>=321) c=c-1; if (Wert>=363) c=c-2; if (Wert>=403) c=c-4; if (Wert>=455) c=c-8; if (Wert>=511) c=c-16; if (Wert>=572) c=c-32; if (Wert>=644) c=c-64; if (Wert>=721) c=c-128; PORTC=c; PORTD=d; nun funktioniert es ...
Hi kannst du mir dein Programm mal schicken??? Ich hätte da eine ähnliche anwendung
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.