Eistee
03.05.2008, 15:37
Hallo zusammen,
ich bin in Sachen Microcontroller ein ziehmlicher Neuling, habe mich aber in letzer Zeit stark damit beschäftig und komme bei ein paar Problemen einfach nicht weiter.
Somit ersuche ich die Hilfe der Alwissenden O:)
Grundsätzlich geht es darum, dass ich eine Spannung messe, diese im Eeprom speichere, sie später am PC wieder aus dem Eeprom auslese und dann über ein Hyperterminal(denke es geht nur so, habe Hterm probiert) an Exel übertrage bzw in eine Exel datei speichere.
Ich verwende einen Atmega8 mit 512Bytes EEprom--> 512*8 = 4096bit = 4kbit, also müsste der Eeprom vom Typ 24C04 sein.
mein Grundcode mitdem ich die Spannung messe, was auch gut klappt.
$regfile = "m8def.dat"
$crystal = 3686400
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
Admux = &B01100000 'ADC Data Register nach links justieren, ADC0 als Input
Adcsra = &B11100100 'ADC aktiv, dauerhafte Messung, Freeruning Modus,Teilungsfaktor 16
Dim Voltbit As Byte
Dim Volt As Single
Cls
Do
Voltbit = Adch 'kein ADCL auslesen--> 8bit ergebnis--> besser im Eeprom speicherbar
Volt = 5 / 256
Volt = Volt * Voltbit
Lcd Voltbit
Lowerline
Lcd "U= " ; Fusing(volt , "#.##") ; "V"
Waitms 200
Cls
Loop
Werte Testweise ins Eeprom schreiben und auslesen (funktioniert nicht :( )
$regfile = "m8def.dat"
$crystal = 3686400
$baud = 9600
$hwstack = 32
$swstack = 10
$framesize = 40
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
'SDA und SCL definieren
Config Sda = Portb.0
Config Scl = Portb.1
Admux = &B01100000 'ADC Data Register nach links justieren, ADC0 als Input
Adcsra = &B11100100 'ADC aktiv, dauerhafte Messung, Freeruning Modus,Teilungsfaktor 16
Dim Voltbit As Byte
Dim Volt As Single
Dim A As Byte
Dim B As Byte
Dim Ausgabe As Byte
Cls
Do
For A = 1 To 10
Voltbit = Adch 'kein ADCL auslesen--> 8bit ergebnis--> besser im Eeprom speicherbar
Volt = 5 / 256
Volt = Volt * Voltbit
'Lcd Voltbit
'Lowerline
'Lcd "U= " ; Fusing(volt , "#.##") ; "V"
'---- schreibe in EEprom ----
'1 bis Überlauf zählen
I2cstart 'Start I2C
I2cwbyte &HA0 'Sende Slave Adresse
I2cwbyte A 'Sende Speicheradresse
I2cwbyte Voltbit 'Sende Wert
I2cstop 'Stop I2C
Waitms 10 'warte 10ms
Lcd " " ; Voltbit ; "ins Eeprom " ' Ausgabe der geschriebenen Werte am LCD
Waitms 500
Next A
'--- lesen vom EEprom ----
For B = 1 To 10
I2cstart 'Start I2C
I2cwbyte &HA0 'sende Slave Adresse
I2cwbyte B 'sende Speicheradresse
I2cstart 'Start I2C
I2cwbyte &HA1 'sende Slave Adresse +1 für Lesen
I2crbyte Ausgabe , Nack 'lese Adresse vom EEprom
I2cstop 'Stop I2C
Lowerline
Lcd " " ; Ausgabe ; "aus dem Eeprom gelesen " 'Ausgabe der EEprom Werte
Waitms 500
Next B
Loop
Beim Schreiben/lesen des EEprom hab ich noch meine Probleme.
Hier zu meinen fragen..
'SDA und SCL definieren
Config Sda = Portb.0
Config Scl = Portb.1
müssen sich diese Befehle genau auf die Ports beziehen, die am MC mit sda,sdl gekenntzeichnet sind?
---------------------------------------
I2cwbyte 0 'H address of EEPROM
I2cwbyte 0 'L address of EEPROM
Was muss ich für Highadress und Lowaddress eingeben(würde mir komisch vorkommen, wenn der wert egal wäre), bzw brauche ich das beim 24C04 überhaupt?
--------------------------------------
Mit welchem Hyperterminal Programm ist es möglich die per Print befehlt über den UART zum PC gesendeten werte am besten direkt in eine exeltabelle umzusetzen?
----------------------------------------
Ich habe vor, per Taster die Messung der Spannungswerte und das Schreiben in den Eeprom beginnt, per Taster wieder beendet wird und mit einem andern Taster die Daten aus dem EEprom gelesen und per Print an den PC geschick werden.
Wie regel ich es am besten, dass nur soviele Werte ausgelesen werden, wie auch reingeschrieben werden?
Gedankengang:Es wird gezählt wie viele Werte geschrieben wurden, diese Anzahl wird an eine bestimmte Speicherstelle(z.B. die erste im eeprom) geschrieben. Diese wird nun ausgelesen und genau so viele weitere Werte ausgelesen wie es der Inhalt der Stelle besagt.
Ich hoffe das Ihr ein paar hilfreiche Tipss für mich habt
O:)
MFG MAX[/code]
ich bin in Sachen Microcontroller ein ziehmlicher Neuling, habe mich aber in letzer Zeit stark damit beschäftig und komme bei ein paar Problemen einfach nicht weiter.
Somit ersuche ich die Hilfe der Alwissenden O:)
Grundsätzlich geht es darum, dass ich eine Spannung messe, diese im Eeprom speichere, sie später am PC wieder aus dem Eeprom auslese und dann über ein Hyperterminal(denke es geht nur so, habe Hterm probiert) an Exel übertrage bzw in eine Exel datei speichere.
Ich verwende einen Atmega8 mit 512Bytes EEprom--> 512*8 = 4096bit = 4kbit, also müsste der Eeprom vom Typ 24C04 sein.
mein Grundcode mitdem ich die Spannung messe, was auch gut klappt.
$regfile = "m8def.dat"
$crystal = 3686400
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
Admux = &B01100000 'ADC Data Register nach links justieren, ADC0 als Input
Adcsra = &B11100100 'ADC aktiv, dauerhafte Messung, Freeruning Modus,Teilungsfaktor 16
Dim Voltbit As Byte
Dim Volt As Single
Cls
Do
Voltbit = Adch 'kein ADCL auslesen--> 8bit ergebnis--> besser im Eeprom speicherbar
Volt = 5 / 256
Volt = Volt * Voltbit
Lcd Voltbit
Lowerline
Lcd "U= " ; Fusing(volt , "#.##") ; "V"
Waitms 200
Cls
Loop
Werte Testweise ins Eeprom schreiben und auslesen (funktioniert nicht :( )
$regfile = "m8def.dat"
$crystal = 3686400
$baud = 9600
$hwstack = 32
$swstack = 10
$framesize = 40
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
'SDA und SCL definieren
Config Sda = Portb.0
Config Scl = Portb.1
Admux = &B01100000 'ADC Data Register nach links justieren, ADC0 als Input
Adcsra = &B11100100 'ADC aktiv, dauerhafte Messung, Freeruning Modus,Teilungsfaktor 16
Dim Voltbit As Byte
Dim Volt As Single
Dim A As Byte
Dim B As Byte
Dim Ausgabe As Byte
Cls
Do
For A = 1 To 10
Voltbit = Adch 'kein ADCL auslesen--> 8bit ergebnis--> besser im Eeprom speicherbar
Volt = 5 / 256
Volt = Volt * Voltbit
'Lcd Voltbit
'Lowerline
'Lcd "U= " ; Fusing(volt , "#.##") ; "V"
'---- schreibe in EEprom ----
'1 bis Überlauf zählen
I2cstart 'Start I2C
I2cwbyte &HA0 'Sende Slave Adresse
I2cwbyte A 'Sende Speicheradresse
I2cwbyte Voltbit 'Sende Wert
I2cstop 'Stop I2C
Waitms 10 'warte 10ms
Lcd " " ; Voltbit ; "ins Eeprom " ' Ausgabe der geschriebenen Werte am LCD
Waitms 500
Next A
'--- lesen vom EEprom ----
For B = 1 To 10
I2cstart 'Start I2C
I2cwbyte &HA0 'sende Slave Adresse
I2cwbyte B 'sende Speicheradresse
I2cstart 'Start I2C
I2cwbyte &HA1 'sende Slave Adresse +1 für Lesen
I2crbyte Ausgabe , Nack 'lese Adresse vom EEprom
I2cstop 'Stop I2C
Lowerline
Lcd " " ; Ausgabe ; "aus dem Eeprom gelesen " 'Ausgabe der EEprom Werte
Waitms 500
Next B
Loop
Beim Schreiben/lesen des EEprom hab ich noch meine Probleme.
Hier zu meinen fragen..
'SDA und SCL definieren
Config Sda = Portb.0
Config Scl = Portb.1
müssen sich diese Befehle genau auf die Ports beziehen, die am MC mit sda,sdl gekenntzeichnet sind?
---------------------------------------
I2cwbyte 0 'H address of EEPROM
I2cwbyte 0 'L address of EEPROM
Was muss ich für Highadress und Lowaddress eingeben(würde mir komisch vorkommen, wenn der wert egal wäre), bzw brauche ich das beim 24C04 überhaupt?
--------------------------------------
Mit welchem Hyperterminal Programm ist es möglich die per Print befehlt über den UART zum PC gesendeten werte am besten direkt in eine exeltabelle umzusetzen?
----------------------------------------
Ich habe vor, per Taster die Messung der Spannungswerte und das Schreiben in den Eeprom beginnt, per Taster wieder beendet wird und mit einem andern Taster die Daten aus dem EEprom gelesen und per Print an den PC geschick werden.
Wie regel ich es am besten, dass nur soviele Werte ausgelesen werden, wie auch reingeschrieben werden?
Gedankengang:Es wird gezählt wie viele Werte geschrieben wurden, diese Anzahl wird an eine bestimmte Speicherstelle(z.B. die erste im eeprom) geschrieben. Diese wird nun ausgelesen und genau so viele weitere Werte ausgelesen wie es der Inhalt der Stelle besagt.
Ich hoffe das Ihr ein paar hilfreiche Tipss für mich habt
O:)
MFG MAX[/code]