- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 8 von 8

Thema: Anfängerquellcode zum Thema Array

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    26.06.2005
    Ort
    Gäufelden
    Alter
    38
    Beiträge
    111

    Anfängerquellcode zum Thema Array

    Hallo an alle!

    Ich habe mich mal wieder vor meine kleine Platine gesetzt und wollte mir zur Übung und zum verdeutlichen ein kleines Programm mit Array´s schreiben. Ziel des Programmes PortA als Eingang des IC in ein Array zu quetschen und das dann mit einem vorgegebenen Array zu vergleichen. Stimmen die beiden Arrays überein sollen 8 LED´s die am PortB sind blinken.

    Leider tut sich gar nichts und ich bin mir nicht sicher wo der Fehler liegt. Ich habe jetzt schon eine ganze Weile rumprobiert aber es will nicht wirklich klappen. Ich kopiere hier mal den Code. Ich bin mir sicher das das für jeden anderen voll Offensichtlich ist warum das nicht funktionieren will .

    Code:
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    #include <avr/io.h>
    #include <util/delay.h>
    
    
    
    
    int main(void)
    {    
        
        #define Ausgang DDRB
        #define Eingang DDRA
        #define LED1 PB0
        #define LED2 PB1
        #define LED3 PB2
        #define LED4 PB3
        #define LED5 PB4
        #define LED6 PB5
        #define LED7 PB6
        #define LED8 PB7
        #define LEDS PORTB
        int n;
        
        Ausgang=0xFF;
        Eingang=0x0;
        
        LEDS=0b11111111;
        
        int v[8];
        v[0]=1;
        v[1]=0;
        v[2]=1;
        v[3]=0;
        v[4]=1;
        v[5]=0;
        v[6]=1;
        v[7]=0;
        int p[8];
        int x;
        int z;
        
        while(1)
        {    
            z=0;
            for (x=0; x<8;x++){
                p[x]=PINA&(1<<(PINA+x));
            }
    
            for (n=0; n<8; n++){    
                if(v[n]==p[n]){
                    z++;
                }
                if (z==7)
                {    LEDS=0b11111111;
                    _delay_ms(1000);
                    LEDS=0b00000000;
                    _delay_ms(1000);
                }
                else
                LEDS=0b00000000;       
            }
        }            
    }
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    Gruß und vielen Lieben Dank
    Jeti
    Geändert von BASTIUniversal (01.04.2013 um 10:20 Uhr)

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.02.2013
    Ort
    Graz
    Beiträge
    211
    Erstens wirds dich vielleicht freuen, dass man arrays so initialisieren kann:
    Code:
    int v[8] = {1,0,1,0,1,0,1,0};
    Ich erkenn keine sonstigen offensichtlichen Fehler, aber was tut das hier?
    Code:
    p[x]=PINA&(1<<(PINA+x));
    PINA ist entweder 0 oder 1? dann wird die Zahl 1 um Eingang plus den Zähler (zw 0 und 8 ) linksverschoben, in welchem Fall sollte das gleich dem Eingang zwischen 0 und 1 sein können?

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    26.06.2005
    Ort
    Gäufelden
    Alter
    38
    Beiträge
    111
    das mit dem Arrays initialisieren ist gut . Dann kann ich mir das nächstes mal Sparen.

    Das
    p[x]=PINA&(1<<(PINA+x));
    soll eigentlich nacheinander jeden einzelnen Pin von PortA abfragen und den dann in ein weiteres Array speichern. Also beim ersten schleifendurchlauf soll quasi
    p[0]=PINA&(1<<(PINA0)); sein, das also der Wert von PINA0 ins Array gespeichert wird.

    Ist da ein Denkfehler dabei?

    Gruß

  4. #4
    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

    Besser wäre es so:

    p[x]=PINA&(1<<x); // für x von 0 bis 7

    Die 1 wird x-mal nach links geschoben. Oder noch knapper:

    char p, v=0b01010101;

    p=PINA;
    for (n=0; n<8; n++){
    if((v & (1<<n)) == (p & (1<<n)){

    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!

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.02.2013
    Ort
    Graz
    Beiträge
    211
    Zitat Zitat von radbruch Beitrag anzeigen
    p[x]=PINA&(1<<x); // für x von 0 bis 7
    Dann kommt bei Übereinstimmung 2^x ins array, und nicht 1, oder?

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Stimmt. Dann muss wohl eher sowas formuliert werden:

    p[x]=(PINA >> x) & 1;
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Ähnliche Themen

  1. Grundwissen zum Thema Robotic
    Von Azubi88 im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 5
    Letzter Beitrag: 29.11.2009, 17:00
  2. Einteigerfragen zum Thema
    Von sulu im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 9
    Letzter Beitrag: 18.04.2008, 17:50
  3. fragen zum thema HF
    Von Che Guevara im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 06.01.2008, 03:01
  4. Anfängerfragen zum Thema Mikrokontrollerschaltung
    Von Hansanaut im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 30.11.2007, 09:28
  5. Stoff zum Thema Drehflügler
    Von ThunderD im Forum Mechanik
    Antworten: 24
    Letzter Beitrag: 20.07.2005, 15:07

Berechtigungen

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

Solar Speicher und Akkus Tests