- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 2 von 2

Thema: Schieberegister aktualisiert sich nicht

  1. #1

    Schieberegister aktualisiert sich nicht

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo Community,

    ich bin neu hier und erst seit einigen Wochen in die AVR-Programmierung in C eingestiegen. Aus diesem Grund ist das alles ziemlich neu für mich. Seit bitte nicht zu hart mit mir wenn ich in sämtliche Fettnäpchen trete

    Ich versuche mich zur Zeit an einem Schieberegister Baustein

    http://www.produktinfo.conrad.com/da...595B1R_STM.pdf

    mit einem ATmega8 anzusteuern. Hier der Code:

    Code:
    while(1)
    	{	
    		
    	uint8_t Wert;
           
    
            PORTD |= (1<<PORT_SCLR);
    		for (int i = 8; i > 0; i--)
            {
                PORTD &=~ (1<<PORT_SER);
                if (Wert & 0x80)
                {
                    PORTD |= (1<<PORT_SER);
                }
    
                Wert <<= 1;
               
                PORTD &=~ (1<<PORT_SCK);
                PORTD |= (1<<PORT_SCK);
            }
    PORTD &=~ (1<<PORT_RCK);
        PORTD |= (1<<PORT_RCK);	
    	
    	PORTD &=~ (1<<PORT_SCLR);
    Was mir an dem Ganzen zur Zeit ein wenig unklar ist:

    1. Wenn ich uint8_t Wert; vor der while-Schleife anlege, erkennt der Baustein die Variable Wert nicht und tut nichts, warum???

    2. Wie kann ich die Variable Wert verändern??? Wenn ich nach diesem Programmcode ein Wert++; hinzufüge, bleibt die Variable bei ihrem vordefinierten Wert und ändert sich nicht!!!

    Vielen Dank im Voraus !!!

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    48
    Beiträge
    1.146
    Hi,

    mir fallen 2 Sachen auf:
    - Du hast die Variable Wert nicht initialisiert. Das sollte z.B. so aussehen:
    Code:
    uint8_t Wert = 0
    Dies sollte auch außerhalb der while-Schleife stehen.
    - Du hast keine Pause zwischen dem Setzen und dem Rücksetzen eines Ports. Das scheint den Compiler dazu veranlassen, den ersten der beiden Befehle wegzuoptimieren (Ich hab's mal im AVR-Simulator nachgestellt, dort war es so).
    Am einfachsten setzt Du hier folgende Zeile zwischen die beiden Befehle.
    Code:
    asm volatile("nop");
    Dies veranlasst den Compiler, zwischen den Beiden Port-Operationen einen NOP-Befehl (no Operation) einzufügen, was einem Takt warten entspricht. Im Simulator hat dies so funktioniert.

    Gruß,
    askazo

Ähnliche Themen

  1. Temperatur wert wird nicht aktualisiert.
    Von Ferdinand im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 31.03.2012, 20:52
  2. Temperatur anzeige auf dem LCD wird nicht aktualisiert?
    Von Ferdinand im Forum C - Programmierung (GCC u.a.)
    Antworten: 16
    Letzter Beitrag: 16.01.2012, 13:55
  3. RN-Mega2560 meldet sich nicht
    Von datatom im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 12.12.2011, 20:06
  4. Servo bewegt sich nicht
    Von smusmut im Forum Robby RP6
    Antworten: 19
    Letzter Beitrag: 31.10.2009, 18:43
  5. LM75 aktualisiert nicht (gelöst)
    Von marc2100 im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 02.09.2009, 15:04

Berechtigungen

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

Solar Speicher und Akkus Tests