- SF800 Solar Speicher Tutorial         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 29 von 29

Thema: Programm probleme

  1. #21
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.11.2006
    Ort
    Hamburg
    Alter
    39
    Beiträge
    199
    Anzeige

    E-Bike
    Moin!!! Ich hab nur rausgefunden, wie man Pullupwiderstände programmiert.
    Für meinen Fall wäre das PORTA |= (1<<PA0); oder? Kann ich um einen Pulldown widerstand zu bekommen einfach PORTA |= ~(1<<PA0); schreiben?

    Und kann mir bitte noch jemand diese Anweisung erklären?
    Das andere ist mir klar geworden, muss zwar jedes mal noch ein bisschen grübeln aber denke ich habs verstanden.
    Dieser Anweisung ist doch auch eine Logische Verknüpfung, aber soll das ausgeschrieben heißen:
    PORTA = PORTA | (1<<PA0) ? Dann würde das ja heißen PortA endspricht PortA oder eine 1 verschoben um 0 stellen (Also an PA0) ??? Das verstehe ich nicht!!!

  2. #22
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.08.2004
    Ort
    Großbardorf
    Alter
    38
    Beiträge
    674
    Das funktioniert aber nur, wenn der Pin als Eingang definiert ist.

    Mit PORTA |= ~(1<<PA0) setzt du alle Bits außer dem durch PA0 festgelegten in PORTA. Das wird nicht das sein, was du willst. Außerdem gibt es im AVR keine pulldown-Widerstände.

    PORTA = PORTA | (1<<PA0)
    entspricht exakt dem
    PORTA |= (1<<PA0)
    Das bedeutet nicht, dass PortA einem anderen PortA ENTSPRICHT, sondern dem PortA ein Wert ZUGEWIESEN bekommt. Beim Berechnen dieses Werts kommt das Zielregister halt auch drin vor.

  3. #23
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.11.2006
    Ort
    Hamburg
    Alter
    39
    Beiträge
    199
    Aber weiter oben haben die von "Bitweises Oder" gesprochen. Und das steht nun mal zwischen PORTA und (1<<PA0) . Echt eigenartig. Muss ich den eingang dan extern auf masse ziehen? Wenn ich das nämlich nicht mache, und den eingang meines µC nicht beschalte verarbeitet er das in diesem Programm nämlich als 1.
    Code:
    #include <avr/io.h>
    #include <stdint.h>
    
    int main (void)
    {
    
     
     DDRA = 0xff;      //Das ganze Register A, also PA0...PA7, als Ausgang deklarieren        
     DDRD = 0x00;      //Das genze Register D, also PD0...PD7, als Eingang deklarieren         
    
     
    while (1)
      {
    
         if ((PIND & (1<<0)) != 0)      // ruhig die bitweise Verknüpfung noch
                                          // mal in Klammern, also
                                          // if ((PIND & (1<<0)) != 0), konkret -> 
    									  //wenn PD high dann
         {
         PORTA |= (1<<0);                //PortA0 auf 5V steuern wenn PortD0 ungleich 0,
                                          // ausgeschrieben heißt das 
    									  //PORTA = PORTA | (1<<), wobei '|' 
    									  //bitweises 'oder' bedeutet
         }
         
         else
         PORTA &= ~(1<<0);               //wenn PortD0 0 ist soll PortA0 0V haben, 
    	                                  //das heißt : ~(1<<0) setze Bit0 und invertiere
                                          //das Ergebnis, danach mach eine &-Verknüpfung
                                          // mit PORTA
       
      }                                   //ende der While-schleife
    
    return 0;                            //starte neu
    }
    Also könnt ich mir auch den internen Pull-Up schenken.
    Habt ihr am anfang auch solche Probleme gehabt?

  4. #24
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    22.11.2005
    Ort
    Braunschweig
    Alter
    48
    Beiträge
    685
    Noch mal zum Verständnis:
    PORTA = PORTA | (1<<PA0)

    'PORTA = ' -> weise PORTA den folgenden Wert zu:
    'PORTA' -> Nimm den aktuellen Wert von PORTA
    '|' -> und verknüpfe diesen bitweise oder mit
    '(1<<PA0') -> 00000001

    Und noch zu den Ports generell:
    Wenn man einen Port als Ausgang schaltet, also z.B.

    DDRA = 0xff

    (das ist übrigens quasi ein DDRA=(1<<PA0)|(1<<PA1)|(1<<PA2)|(1<<PA3)|(1<<PA4)| (1<<PA5)|(1<<PA6)|(1<<PA7), setzt also alle 8 Bit im Richtungsregister)

    dann schaltet man über die Bits in PORTA die Ausgänge High oder Low.

    definiert man den Port per DDRA=0x00 als Eingang, kann man mit PORTA Pullup-Widerstände für die einzelnen Eingänge aktivieren,d.H. ist nichts angeschlossen, zieht der Pullup-Widerstand den Pin auf High, um das zu ändern, muß der Pin auf GND gezogen werden.
    Will man ´den Zustand der Eingangspins abfragen, benutzt man PINA, in PORTA steht nur, für welchen Pin die Pullups aktiviert sind.

    Ich hoffe, das hilft Dir noch weiter.

  5. #25
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2007
    Ort
    Kornwestheim (kWh)
    Beiträge
    1.118
    Hi, bin neu hier und versuch auch grade die 8 Pins D0 bis D7 des Druckerports lpt zu schalten. Ich nutze DevC++ als Compiler und will das Programm dann auf nem win95er-PC laufen lassen.
    der Compiler mault immer wegen dem ende rum, da wo was nicht stimmt steht auch n kommentar, dass der Compiler n Problem mit dem "="hat. auch mit { und }, welche früher mal drin waren nach "void lib_laden ()" hat der Compi 'n Problem.

    Könnte sich biddebidde jemand mir erbarmen und mir erklären, was da nicht stimmt? und ob das Programm danach auch macht, was es soll? [-o<

    viiiiiiiiiiiiiiiiielen dank schomal im vorraus

    AlKi
    Angehängte Dateien Angehängte Dateien

  6. #26
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    22.11.2005
    Ort
    Braunschweig
    Alter
    48
    Beiträge
    685
    so auf die schnelle :
    hlib ist nicht deklariert, soweit ich das sehe, außerdem fehlt eine geschweifte Klammer '{' davor, und ich glaube, dass mit inp32 und oup32 muß auch irgendwie anders aussehen. Ich hab das auch mal irgendwo benutzt, ich such nacher mal ein beispiel ruas. Überigens braucht man unter Win95 die dll nicht, da kann man noch direkt auf den Ports rumorgeln.

  7. #27
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2007
    Ort
    Kornwestheim (kWh)
    Beiträge
    1.118
    Danke, ich hab jetzt das problem gefunden:
    ich Trottel hab die Definition in das main() programm geschrieben, was natürlich falsch ist

    dann macht mein Compiler keine Faxen mehr, und richtig isses auch :-P

  8. #28
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2007
    Ort
    Kornwestheim (kWh)
    Beiträge
    1.118
    ich muss jetzt nur noch kleine sleep-Funktionen einbauen, weil ich mit den impulsen eine Ansteuerelektronik für Schrittmotoren ansteuern will. Weiß irgendjemand wie man das bei C++ macht?

    (Header= #include <time.h> und dadurch kann man dann irgendn Befehl nutzen, oder so)

    schomal THX für jede antwort!

    Gruß

    AlKi

  9. #29
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2007
    Ort
    Kornwestheim (kWh)
    Beiträge
    1.118
    nach etwa 2 Stunden hab ichs gefunden:
    Sleep([Zahl]);
    in irgendeinem von den Headern:
    #include <iostream>
    #include <stdio.h>
    #include <conio.h>
    #include <dos.h>
    #include <windows.h>
    #include <time.h>

    Sollte sowohl bei C++ als auch C gehen.

    Danke, falls sich wer schon die Arbeit gemacht hat, und rumgegrübelt hat.

    AlKi


    EDIT: war wohl in windows.h

Seite 3 von 3 ErsteErste 123

Berechtigungen

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

Labornetzteil AliExpress