- fchao-Sinus-Wechselrichter AliExpress         
Seite 3 von 7 ErsteErste 12345 ... LetzteLetzte
Ergebnis 21 bis 30 von 64

Thema: Spannung auslesen

  1. #21
    shedepe
    Gast
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Schau halt im Datenblatt nach, was es bedeutet REFS0 zusetzen (oder auch nicht zusetzen). Datenblatt lesen ist nich alzu schwierig, wenn man sich erst mal rangetraut hat. Die wahl der Referenzspannung hängt davon ab wie stabil dein VCC ist, welchen Spannungsbereich du messen willst usw.

    Aber ja sollte funzen wenn du keins der beiden bits setzt

  2. #22
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    15.04.2008
    Beiträge
    330
    Zum Uploaden auf den Chip klappt es endlich!!

    aber irgendwas (Wackelkontakt) muss noch in meiner Schaltung sein, denn es läuft nicht...
    Ich habe es einprogramiert, dass sobald die Spannung zwei Werte erreichen sollte jewils eine Led blinken soll, wenn nicht leuchten beide. Nun leuchtet aber nix...

  3. #23
    Erfahrener Benutzer Roboter Experte Avatar von BurningWave
    Registriert seit
    22.12.2007
    Ort
    nahe Stuttgart
    Alter
    30
    Beiträge
    656
    Dann zeig uns mal deinen Code.

    Um Hardwarefehler auszuschließen kannst du mal ein Programm schreiben, das die LEDs einfach einschält. Wenn sie nicht leuchten, weißt du, dass irgendwas an deiner Schaltung nicht stimmt.
    meine Homepage: http://www.jbtechnologies.de
    Hauptprojekte: Breakanoid 2 - Sound Maker

  4. #24
    shedepe
    Gast
    Hast du die LEDs auch schon mal einzeln. Also unabhängig vom ADC-Messwert getestet ?
    Poste vllt auch noch einmal das gesamte Programm.

    PS. Wenn du eine möglichkeit hast die Daten (z.B. auf ein Display oder an den PC) auszugeben. Sende doch die ADC-Messwerte erst einmal an den PC

  5. #25
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    15.04.2008
    Beiträge
    330
    //----------------------------------------------------------------------
    #define F_CPU 3686400 // Taktfrequenz des myAVR-Boards
    #include <avr\io.h> // AVR Register und Konstantendefinitionen
    #include <inttypes.h>
    //----------------------------------------------------------------------

    uint16_t readADC(uint8_t channel)
    {
    // Funktion 1 zum Auslesen der Spannung

    uint8_t i; // Variablen definieren (Zählervariable i + Resultat)
    uint16_t result = 0;

    ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1); //ADEN = ADC Enable
    // wenn adps1+2 on sind und adps0 off, dann ist der Teilungsfaktor 64 (Tabelle Datasheet)

    ADMUX = channel; //Kanal wählen; REFs0+1 -> interne Referenz 2,56V verwenden, REFS1 gibt es bei Attiny13 nicht
    //externen Kondensator mit 100nF (Aufdruck 104) an AREF auf Masse

    //Dummy-Readout (unten), misst 1* Ergebnis, wird nicht gespeichert
    ADCSRA = ADCSRA | (1<<ADSC); // Schaltet bei ADCSRA das ADSC-Bit ein, d.h. Messung starten
    while(ADCSRA & (1<<ADSC)); //Warte bis Messvorgang vorbei ist

    // Nun 3* Spannung auslesen, Durchschnittswert ausrechnen
    for (i=0; i<3; i++)
    {
    // Schleife, startet 3*
    ADCSRA = ADCSRA |(1<<ADSC); // Einmal messen
    while(ADCSRA & (1<<ADSC)); //Warte bis Messung vorbei

    result = result + ADCW; // Resultate zusammenzählen (R1+R2+R3) -> später alles /3
    }

    ADCSRA = ADCSRA & (~(1<<ADEN)); //ADC wieder deaktivieren

    result=result/3; // Durchschnittswert

    return result;
    }

    int main (void) // Hauptprogramm, startet bei Power ON und Reset
    {
    float spannung; //Definiere Variable
    DDRB=0b00001111;

    while (true)
    {

    uint16_t result = readADC(0); // ruft die ADC Funktion auf an Pin0 =ADC0

    return 0;
    spannung=0.003086*result;
    waitMs(400);

    if (1.5<spannung<1.7)
    {
    PORTB=PORTB|(1<<PB1);
    waitMs(600);
    PORTB=PORTB&(~(1<<PB1));
    }
    if ((spannung>1)&(spannung<1.1))
    {
    PORTB=PORTB|(1<<PB2);
    waitMs(600);
    PORTB=PORTB&(~(1<<PB2));
    }

    else
    {
    PORTB=PORTB|(1<<PB1)|(1<<PB2);
    waitMs(600);
    PORTB=PORTB&(~(1<<PB1))&(~(1<<PB2));
    }
    }

    }



    _____
    So, das wäre der Code
    Dazu wäre noch zu sagen: ich nehme einen Spannungsteiler aus 2 oder 3
    330Ohm Widerständen bei einer Spannung von 3,16V -> Daher wird bei 2 Widerständen rund 1,6 V in der Mitte abfallen

  6. #26
    shedepe
    Gast
    Nimm größere Widerstände. Sonst fließt da ja ein nennenswerter Strom den du in Wärme umwandelst.

    also in deiner endlosschleife.
    while(true)
    {

    return 0; //Sollte nicht drin vorkommen. Da geht er aus deiner Schleife raus weil er die MainFunktion als beendet sieht.
    }

    Und dir fehlt auch noch eine Konvertierung in float. Sonst geht die Zeile:
    spannung=0.003086*result;
    nicht.

  7. #27
    Erfahrener Benutzer Roboter Experte Avatar von BurningWave
    Registriert seit
    22.12.2007
    Ort
    nahe Stuttgart
    Alter
    30
    Beiträge
    656
    Bitte benutze Code-Tags und rücke deinen Code richtig ein, sonst hat niemand Lust den Code zu lesen!

    Also wie schon gesagt: return 0; gehört vor die letzte geschweifte Klammer, die main() schließt, da return aus der aktuellen Funktion zurückspringt und in diesem Fall das Programm beendet.

    Außer dem ist "if (1.5<spannung<1.7)" Unsinn, da solche Vergleiche nicht das bewirken, was du willst, es müsste "if((spannung > 1.5) && (spannung < 1.7))" heißen, genauso wie hier: "if ((spannung>1)&(spannung<1.1))" statt & schreibt man && wenn man den logischen Operator meint.

    PORTB=PORTB|(1<<PB1); schreibt man besser PORTB |= (1 << PB1); und PORTB=PORTB&(~(1<<PB2)); sollte besser PORTB &= ~(1 << PB2); lauten. Beide Schreibweisen funktionieren, jedoch ist letzteres besser, da es kürzer und übersichtlicher ist.

    Was hängt jetzt genau an deiner ADC-Pin? Ich würde am besten ein Poti dranhängen (ca. 10 - 100k), dessen Schleifer am µC hängt und die beiden anderen Kontakte jeweils an Vcc bzw. GND.

    EDIT: 500. Beitrag :P
    meine Homepage: http://www.jbtechnologies.de
    Hauptprojekte: Breakanoid 2 - Sound Maker

  8. #28
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    15.04.2008
    Beiträge
    330
    Was hängt jetzt genau an deiner ADC-Pin? Ich würde am besten ein Poti dranhängen (ca. 10 - 100k), dessen Schleifer am µC hängt und die beiden anderen Kontakte jeweils an Vcc bzw. GND.
    Also vorerst habe ich mal zwei 330 Ohm angehängt und n der Mitte die Spannung angezapft...

    Dh. ich muss result erst in eine float umwandeln?

  9. #29
    Erfahrener Benutzer Roboter Experte Avatar von BurningWave
    Registriert seit
    22.12.2007
    Ort
    nahe Stuttgart
    Alter
    30
    Beiträge
    656
    Also vorerst habe ich mal zwei 330 Ohm angehängt und n der Mitte die Spannung angezapft...
    Nimm ein Poti, wie ich es gesagt habe, das ist besser.

    Dh. ich muss result erst in eine float umwandeln?
    Nicht unbedingt, ist aber schöner, also (float)(result)

    Hast du die anderen Fehler behoben und das mit den LEDs ausprobiert? Wenn ja, funktioniert es?
    meine Homepage: http://www.jbtechnologies.de
    Hauptprojekte: Breakanoid 2 - Sound Maker

  10. #30
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    15.04.2008
    Beiträge
    330
    Hast du die anderen Fehler behoben und das mit den LEDs ausprobiert? Wenn ja, funktioniert es?
    Leider noch nicht.

    Ich habe mir vor kurzem ein neues Steckraster-Board gekauft und da hatte ich noch gewisse Anfangsprobleme. Sobald ich aber einen Schritt weiter bin, poste ich dies natürlich gleich

Seite 3 von 7 ErsteErste 12345 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests