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.
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
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.
Hallo tobiastob
Bei meinem ATtiny13 schreibe ich Werte die ich dauerhaft speichern möchte in das EEProm:
(Code aus dem ATtiny-Datenblatt)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; }
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!
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
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
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.
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
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
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
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.
Lesezeichen