- LiFePO4 Speicher Test         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: Variable per Tastendruck dauerhaft ändern. Bootloader?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    04.11.2007
    Beiträge
    96

    Variable per Tastendruck dauerhaft ändern. Bootloader?

    Anzeige

    Praxistest und DIY Projekte
    Hallo

    ist es möglich, per Taster am I/O Pin eine zuvor deklarierte Variable zu ändern (z. B. den Wert um 10 erhöhen) , sodass sie auch nach einem Neustart des Controllers diesen Wert beibehält?
    Soweit ich das verstanden habe, funktioniert das mit einem Bootloader bei einem ATMega über RS232 (http://www.microsyl.com >> MegaLoad). Aber funktioniert das auch mit einem Attiny13 und Taster?

    Grüße
    Tob

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    28.10.2004
    Ort
    Baoding
    Alter
    44
    Beiträge
    689
    Dafür brauchst Du keinen Bootloader.
    Der Tiny13 hat EEPROM, einen Speicher der auch ohne Spannung seine Daten behält.

    Den EEPROM kannst Du im µC-Programm Lesen und Schreiben und nach nem neustart hat er auch noch die gespeicherten Werte.

  3. #3
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo tobiastob

    Bei meinem ATtiny13 schreibe ich Werte die ich dauerhaft speichern möchte in das EEProm:

    Code:
    void EEPROM_write(unsigned char ucAddress, unsigned char ucData)
    {
    /* Wait for completion of previous write */
    while(EECR & (1<<EEPE));
    /* Set Programming mode */
    EECR = (0<<EEPM1)|(0>>EEPM0);
    /* Set up address and data registers */
    EEARL = ucAddress;
    EEDR = ucData;
    /* Write logical one to EEMPE */
    EECR |= (1<<EEMPE);
    /* Start eeprom write by setting EEPE */
    EECR |= (1<<EEPE);
    }
    
    unsigned char EEPROM_read(unsigned char ucAddress)
    {
    /* Wait for completion of previous write */
    while(EECR & (1<<EEPE));
    /* Set up address register */
    EEARL = ucAddress;
    /* Start eeprom read by writing EERE */
    EECR |= (1<<EERE);
    /* Return data from data register */
    return EEDR;
    }
    (Code aus dem ATtiny-Datenblatt)

    Das funktioniert aber nur bei byte/integer-Werten einfach, bei anderen Datentypen ist es etwas komplizierter (über pointer auf die Variablen kommt man hier zu den Bytes)

    Beim allerersten Programmlauf schreibst du den Defaultwert deiner Variablen in das EEProm und kommentierst dann den Schreibbefehl aus. Bei allen anderen Programmstarts liest du zu Beginn den Wert der Variablen aus dem EEProm wieder aus. Auf Tastendruck kannst du nun auch einen anderen Wert ins EEProm schreiben und diesen beim nächsten Start wieder auslesen.

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.188
    Bei CodeVision AVR läuft das folgendermassen.
    Bei der Deklaration der Variablen-

    Beispiel:
    eeprom unsigned int ee_testvar=1234; /* Die EEPROM Variable */
    volatile unsigned int ui_testvar; /* Die Spiegel Variable im RAM */

    wird eine .eep Datei angelegt.
    Wenn man diese beim Proggen in den Controller schreibt sind die default Werte schon mal drin.

    Beim Programmstart wird diese Variable wieder eingelesen

    ui_testvar=ee_testvar;

    und kann ganz normal im Programm wieder verwendet werden.

    Will man einen neuen Wert wieder in das EEPROM zurückschreiben geht das einfach so.

    ee_testvar=ui_testvar;

    Wie das bei Win AVR zu machen ist kann ich leider nicht sagen.
    Ich lese grundsätzlich alle ofter benötigten EEPROM Variablen beim Programmstart in normale Variablen ein, da ein Zugriff auf das EEPROM wesentlich länger dauert, als ein Zugriff aufs RAM

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    04.11.2007
    Beiträge
    96
    Danke euch. Das ist ja doch weniger aufwändig, als ich dachte. Ich hab bisher Bascom und ponyprog verwendet. Benutzt das hier zufällig auch jemand und weiß schon, wie es da funktionert (und würde es mir verraten)? Falls nicht, ists auch ok, dann versuch ich selbst mein Glück. Jetzt weiß ich ja zumindest, wonach ich da suchen muss.

    Ich hätte noch eine Frage. Was ich am Ende gerne hätte, wäre ein über PWM regulierbarer Motor. Und mittlerweile glaube ich, dass sich das mit einem Drehregler besser handhaben ließe. Meine Idee wäre nun, einen Trimmer an einen ADC Port zu setzen, und den Messwert dann nach einer kurzen Umrechnung als Variable für die PWM zu nutzen.
    Ist das ein vernünftiger Ansatz, oder geht das anders viel leichter? Oder überhaupt anders?
    Ist für PWM ein externer Quarz nötig, oder macht sich das kaum bemerkbar?

    Gruß
    der Tob

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.188
    Geber:
    Das mit dem Poti kannst Du so machen, auch wenn Potis mit zunehmendem Alter zu kratzen beginnen.

    Man kann natürlich auch mit Taster die Drehzahl rauf und runter regeln.
    Es kommt halt auf die Applikation an die man vorhat.

    PWM:
    Wenn es Dir nicht auf die absolut genaue Einhaltung der PWM Frequenz ankommst kannst Du jederzeit den internen Oszillator der AVR's verwenden.

    BASCOM:
    Mit Bascom kann ich Dir leider nicht helfen - ich würd aber die Frage mal im AVR BASIC Forum hier stellen, da wird Dir sicher geholfen.

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    04.11.2007
    Beiträge
    96
    Ist das Kratzen bei Spindeltrimmern auch so, oder nur bei "normalen" Potis? Zu stark werde ich ihn aber wohl auch nicht beanspruchen.
    Ich dachte an den hier http://www.reichelt.de/?;ACTION=3;LA...b1df82cb707e81
    also einen 50 Ohm Spindeltrimmer (und ca 50 Ohm Gegenwiderstand). Gingen auch ein 10 Ohm Spindeltrimmer , oder ist das für den ADC eine zu geringe Bandbreite?
    Wegen Bascom frag ich da mal nach - danke.

    der Tob

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    11.04.2005
    Beiträge
    1.469
    dim EE_variable as eram integer
    dim Variable as integer


    EE_Variable=variable 'Schon steht's fest im EEPROM

    Variable=EE_Variable 'Und so liest man aus dem EEPROM

    Musst übrigens immer den Weg über eine Variable gehen.
    EE_Variable=16 'geht nicht

    Variable=16
    EE_Variable=variable 'Das geht.



    Gruß
    Christopher

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    54
    Beiträge
    524
    Hallo,

    warum möchtest du 50 Ohm nehmen? Nimm 10K, ein Beinchen an Vcc, ein Beinchen an 0V und den Schleifer auf den ADC-Pin. Darfst halt nicht vergessen externe Referenz einzustellen.

    Gruß

    Jens

  10. #10
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Ein Spindeltrimmer ist zur PWM regelung eins Motor eher übertrieben. Das Kratzen ist bei den Spindetrimmern auch nicht weniger, nur die verstellt man nicht so gerne. Hier ließe sich das Kratzen auch mit einem Kondensator am ADC Eingang deutlich verringern.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

12V Akku bauen