- LiFePO4 Speicher Test         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 30

Thema: Schreiben in SRAM

  1. #11
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    53
    Beiträge
    2.236
    Anzeige

    Praxistest und DIY Projekte


    Die Tasten bei Dir sind etwa so angeschlossen, wi beim Asuro, oder, eventuell ohne den int1.

    Das ist wohl kein Problem den int1 zu entfernen, Baud und Quarz einzustellen und die m8def.inc abzuändern.

    Damit bekommst Du schon angezeigt, welche Werte bei welcher Taste zustande kommen.
    Zugegeben, das Programm ist etwas länger, aber 3/4 davon ist bin->ASCII und UART Ausgabe.

    Wenn Du noch fragen hast, fragen.



    Gruß Sebastian
    EDIT:

    Ohne viel drum rum

    Code:
    ;AD converter Init 
       ldi tmp,(1<< ADEN) | (1<<ADPS1) | (1<<ADPS2) 
       out ADCSRA,tmp 
       ldi tmp,(1<<REFS0) | (1<<MUX2) 
       out ADMUX,tmp 
    sbi ADCSRA,ADSC   ;Starte ADC 
    
    warte: 
       sbis ADCSRA,ADIF 
       rjmp warte 
       ;fertig und lese Ergebnis ein 
       in rBin1L,ADCL 
       in rBin1H,ADCH
    Das wäre dann ohne drum rum.
    Ergebnis der Abfrage liegt in rBin1L und rBin1H, die mußt Du Dir noch definieren.
    Den ADC Kanal mußt Du auch noch anpassen, ich weiß nicht wo die Tasten angeschlossen sind(schaue ADMUX Register)

  2. #12
    Neuer Benutzer Öfters hier
    Registriert seit
    13.06.2005
    Beiträge
    26
    @ Ratber

    OK. Das Problem war nur ich wußte nicht wie man einen Link hier im Forum erzeugt.

    Gibt es denn hier im Forum auch so eine Anleitung, wo man die Befehle für das Erzeugen von Links oder Sourcecodes nachlesen kann.
    Werde in Zukunft versuchen mich so weit wie möglich an die Forums-Regeln zu halten.

    Gruß

    @Sebastian

    Danke für die Mühe!

  3. #13
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Nein das ist keine Boardregel aber es ist eben extreem hilfreich wenn man zu einem Hinweis auf ein anderes Topic auch gleich die betreffende Örtlichekit mitliefert.

    Schau mal beim schreiben über das Eingabefeld,da sind jedemenge Buttons usw.
    Wenn du mit dem Mauscursor drüber fährst dann erscheint in der Zeile direkt über dem Eingabefenster ein kleiner Text der zeigt wie man es anwenden kann.

    Da man ja hier seinen Post beliebig editieren kann kannste damit mal rumspielen um ein gefühl dafür zu finden.

    [schild=11 fontcolor=FF0000 shadowcolor=00FFFF shieldshadow=1]Alles Klar ?[/schild] (Zb. Smilie Creator)
    Gruß
    Ratber

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    13.06.2005
    Beiträge
    26
    Das Programm läuft jetzt.


    Jedoch möchte ich noch wissen, wie kann man den SRAM auslesen (z.B. im Ponyprog2000)? Oder kann ich den SRAM nicht auslesen, da dieser flüchtig ist?
    Muss ich dann vielleicht die Werte ins EEPROM speichern. Aber ab welcher Adresse finde ich den EEPROM? Ist das ab Adresse 0x8000?

    Es handelt sich um einen ATMEGA32.
    Code:
    .Include "m32def.inc"
    .DEF tmp = R16
    .DEF lowad = R17
    .DEF highad = R18
    .EQU wertadlow = 0x60
    .EQU wertadhigh = 0x61
    ldi tmp, (1<<ADEN)|(1<<ADPS1)|(1<<ADPS2)
    out ADCSRA, tmp
    ldi tmp, (1<<REFS0)|(1<<MUX2)|(1<<MUX1)|(1<<MUX0)
    out ADMUX, tmp
    sbi ADCSRA, ADSC
    
    wait:
    sbis ADCSRA,ADIF
    rjmp wait
    
    in lowad, ADCL
    in highad, ADCH
    sts wertadlow, lowad
    sts wertadhigh, highad

  5. #15
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    wie du schon sagtest,Das Sram ist flüchtig.
    Saft Weg = Daten weg.
    Beim Softreset bleibt der inhalt aber erhalten.

    Muss ich dann vielleicht die Werte ins EEPROM speichern. Aber ab welcher Adresse finde ich den EEPROM? Ist das ab Adresse 0x8000?
    Flash,Sram und EEProm sind alle drei Linear Adressiert und getrennt voneinander und über ihre Adressregister erreichbar. (zb. EEprom über EEARH und EEARL)

    Schau mal ins Datenblatt da sind alle Informationen dazu drinne (zb. Welche Pausen beim EEProm nach dem Schreibzugriff nötig sind usw.)
    Gruß
    Ratber

  6. #16
    Neuer Benutzer Öfters hier
    Registriert seit
    13.06.2005
    Beiträge
    26
    So, nach langem Hin und Her, habe ich nun endlich ein funktionierendes Programm schreiben können. Es liest im Grunde nur die ADC-Werte aus. Aber ich nutze es um herauszufinden in welchem Bereich die Werte für die verschiedenen Tasten liegen.

    Code:
    .Include "m32def.inc"
    .DEF tmp = R16
    .DEF lowad = R17
    .DEF highad = R18
    
    ;***************
    ;Auslesen des ADC
    ;***************
    
    ldi tmp, (1<<ADEN)|(1<<ADPS1)|(1<<ADPS2)
    out ADCSRA, tmp
    ldi tmp, (1<<REFS0)|(1<<MUX2)|(1<<MUX1)|(1<<MUX0)
    out ADMUX, tmp
    sbi ADCSRA, ADSC	;Das Bit ADSC wird gesetzt und der ADC startet.
    
    wait:
    sbis ADCSRA,ADIF	;Das ADIF wird abgefragt, ob eine Spannung anliegt.
    rjmp wait	;Warteschleife bis Spannung anliegt.
    
    in lowad, ADCL	;Das Low-Byte des ADCs wird ausgelesen.
    in highad, ADCH	;Das High-Byte wird ausgelesen.
    
    ;******************
    ;Speichern ins EEPROM
    ;******************
    
    write1:
    sbic EECR,EEWE	;Ist der Schreibzyklus beendet, PC = PC +2
    rjmp write1
    
    ldi R19, 0xF0	;Festlegen der Zieladresse.
    ldi R20, 0x00	
    
    out EEARH, R20	;Die Zieladresse des EEPROM wird übertragen.
    out EEARL, R19
    
    ;Als Nächstes wird das Low-Byte des ADCs abgespeichert.
    
    out EEDR, lowad	;Byte in Zwischenspeicher laden.
    
    ;Folgende 2 Befehle sorgen dafür, dass der Wert im Zwischenspeicher nun endgültig in der Zieladresse des EEPROMs abgespeichert wird.
    
    sbi EECR,EEMWE
    sbi EECR,EEWE
    
    write2:
    sbic EECR,EEWE	;Ist der Schreibzyklus beendet, PC = PC +2
    rjmp write2
    
    ;Nun wird die nächste Zieladresse festgelegt und das High-Byte des ADCs abgespeichert.
    
    inc R19
    
    out EEARL, R19	;Es muss nur das Low-Byte geändert werden.
    out EEDR, highad
    
    sbi EECR,EEMWE
    sbi EECR,EEWE
    ;Ende :)
    Danke für die Hilfe. Nun verstehe ich endlich wie der AD-Wandler arbeitet und der EEPROM beschrieben werden kann.

  7. #17
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Yo,kein Problem
    Gruß
    Ratber

  8. #18
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    53
    Beiträge
    2.236
    Danke für die Hilfe. Nun verstehe ich endlich wie der AD-Wandler arbeitet und der EEPROM beschrieben werden kann.
    Es tut gut solche Beiträge zu lesen, weiter so !

    Gruß Sebastian

  9. #19
    Neuer Benutzer Öfters hier
    Registriert seit
    13.06.2005
    Beiträge
    26
    Muss noch mal den Thread auswühlen. Dachte bis jetzt das Prorgamm würde richtig funktionieren, jedoch, spuckt der AD-Wandler die ganze Zeit Werte aus, auch wenn ich die Tasten nicht drücke.

    Das Programm sollte einfach am PA7 des 1.4 RN-Control Board, dort wo 5 Taster über Spannungsteiler angeschlossen sind, die Spannungswerte in die Speicherzellen des EEPROMs sichern. Habe ich irgendwo einen Fehler gemacht. Ich werde nicht wirklich schlau aus den Werten.

    Edit:

    Hier noch der Programmcode:
    Code:
    .Include "m32def.inc"
    .DEF tmp = R16
    .DEF lowad = R17
    .DEF highad = R18
    .EQU wertadlow = 0x60
    .EQU wertadhigh = 0x61
    
    ldi tmp, (1<<ADEN)|(1<<ADPS1)|(1<<ADPS2)
    out ADCSRA, tmp
    ldi tmp,(1<<MUX2)|(1<<MUX1)|(1<<MUX0)
    out ADMUX, tmp
    sbi ADCSRA, ADSC	;Das Bit ADSC wird gesetzt und der ADC startet.
    
    wait:
    sbis ADCSRA,ADIF	;Das ADIF wird abgefragt, ob eine Spannung anliegt.
    rjmp wait	;Warteschleife bis Spannung anliegt.
    
    in lowad, ADCL	;Das Low-Byte des ADCs wird ausgelesen.
    in highad, ADCH	;Das High-Byte wird ausgelesen.
    
    write1:
    sbic EECR,EEWE	;Ist der Schreibzyklus beendet, PC = PC +2
    rjmp write1
    
    ldi R19, 0xF0	;Festlegen der Zieladresse.
    ldi R20, 0x00	
    
    out EEARH, R20	;Die Zieladresse des EEPROM wird übertragen.
    out EEARL, R19
    
    ;Als Nächstes wird das Low-Byte des ADCs abgespeichert.
    
    out EEDR, highad	;Byte in Zwischenspeicher laden.
    
    ;Folgende 2 Befehle sorgen dafür, dass der Wert im Zwischenspeicher nun endgültig in der Zieladresse des EEPROMs abgespeichert wird.
    
    sbi EECR,EEMWE
    sbi EECR,EEWE
    
    write2:
    sbic EECR,EEWE	;Ist der Schreibzyklus beendet, PC = PC +2
    rjmp write2
    
    ;Nun wird die nächste Zieladresse festgelegt und das High-Byte des ADCs abgespeichert.
    
    inc R19
    
    out EEARL, R19	;Es muss nur das Low-Byte geändert werden.
    out EEDR, lowad
    
    sbi EECR,EEMWE
    sbi EECR,EEWE
    ;Ende
    Habe das REFS0 rausgenommen, da ich mit 2,56 V externer Spannung vergleiche.

    Doch der ADC erstellt trotzdem noch immer Werte, ohne dass ich auf eine Taste drücke

  10. #20
    Neuer Benutzer Öfters hier
    Registriert seit
    13.06.2005
    Beiträge
    26
    Mein Problem besteht immer noch. Ich weiss nicht was ich falsch mache. Habe es schon mehrmals kontrolliert und geändert, jedoch macht der ADC noch immer eine Wandlung ohne Drücken einer Taste.

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress