- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: Programmschwierigkeiten vom Anfänger

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    19.07.2005
    Alter
    44
    Beiträge
    50

    Programmschwierigkeiten vom Anfänger

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo!
    Ich habe gerade das Tutorial für die Basic Programmierung gelesen und auch einige versuche gemacht. Ich bin noch neuling in sachen Programmierung und bin dabei einige Programmiersprachen auszuprobieren um festzustellen welche für mich am besten geeignet ist.
    Ich habe den Beispielcode etwas abgeändert:
    Code:
    '###################################################
    'step3.bas.BAS
    'für
    'RoboterNetz.de AVR Tutorial in RN-Wissen
    '
    'Autor: Frank Brall
    'Weitere Beispiele und Beschreibung der Hardware
    'unter
    '  http://www.Roboternetz.de oder
    '  http://www.Roboternetz.de/wissen
    '#######################################################
    
    
    $regfile = "m16def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 8000000
    
    Config Portb.7 = Output                                     'Ein Pin wird aus Ausgang konfiguriert PC0 (also Pin0 von Port C)
    Config Pina.7 = Input                                       'Ein Pin (PA0) wird als Eingang definiert
    
    Config Portb.6 = Output                                     'Ein Pin wird aus Ausgang konfiguriert PC0 (also Pin0 von Port C)
    Config Pina.6 = Input                                       'Ein Pin (PA0) wird als Eingang definiert
    
    
    
    Do
      If Pina.7 = 1 Then
      Portb.7 = 1
      Waitms 100
      Portb.7 = 0                                               'Pin wird auf Low, also 0V geschaltet
      Waitms 100
                                                 'Pin wird auf High, also 5V geschaltet
      Else
        Portb.7 = 0                                             'Pin wird auf Low, also 0V geschaltet
      End If
    
    
             If Pina.6 = 1 Then
             Portb.6 = 1
             Waitms 100
             Portb.6 = 0                                        'Pin wird auf Low, also 0V geschaltet
             Waitms 100
                                                 'Pin wird auf High, also 5V geschaltet
             Else
             Portb.6 = 0                                        'Pin wird auf Low, also 0V geschaltet
      End If
    
    Loop
    
    
    End
    Die beschaltung des Atmega16 sieht bei mir so aus:
    PA0-PA7 Schalter (Ich gebe mit den Schaltern einen 5V Pegel auf die Eingänge.
    PB0-PB7 Ausgänge (LED´s mit Widerstand gegen Masse)

    Die Schaltung sollte eigentlich bezwecken, das der Ausgang PB7 Blinken soll, wenn ich den eingang PA7 auf High gesetzt habe und PB6 Blinken soll wenn ich den Eingang PA6 auf High gesetzt hab.

    Es ist jedoch egal welchen Eingang ich auf High setzte (auch z.B. bei PA0) fangen beide an zu blinken.

    Habe ich mir den Code zu einfach vorgestellt? (Ich kenne Basic nur noch aus der guten alten C64 Zeit )

    Danke für eure Hilfe!!!

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Der Code is eigentlich ok. Wie ist das mit den Schaltern ?
    Pina.6 u. Pina.7 sollten immer eindeutig auf +5 oder GND liegen.
    d.h. wenn du auf +5 schaltest, mußt du sie mit ~10k mit GND verbinden (Pulldown), damit sie bei offenem Schalter wissen, was läuft.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    19.07.2005
    Alter
    44
    Beiträge
    50
    Hallo!
    Die Schalter sind alle mit 10k Pulldown Widerständen versehen. Daran kann es nicht liegen....aber woran dann?

    Danke für die Hilfen!!

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Das hört sich wirklich eher nach einem Hardwarefehler an.
    Versuch es doch lieber mal mit den internen Pullups und Schalter gegen Masse geschaltet.

    http://www.rowalt.de/mc/index.htm <--- Die Seite hilft dir sicherlich weiter dazu.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    19.07.2005
    Alter
    44
    Beiträge
    50
    Hallo!
    War tatsächlich ein Hardwarefehler...ich hatte das Widerstandsnetzwerk für Pulldown falsch eingelötet
    Jetzt läuft das Programm tadellos!!!!

    Danke für die Hilfe!!!!

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    19.07.2005
    Alter
    44
    Beiträge
    50
    Nochmal....
    Hier mal das erweitere Programm...vielleicht interessiert es ja mal jemanden...
    Code:
    '###################################################
    'step3.bas.BAS
    'für
    'RoboterNetz.de AVR Tutorial in RN-Wissen
    '
    'Autor: Frank Brall
    'Weitere Beispiele und Beschreibung der Hardware
    'unter
    '  http://www.Roboternetz.de oder
    '  http://www.Roboternetz.de/wissen
    '#######################################################
    
    
    $regfile = "m16def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 8000000
    
    Config Portb.7 = Output                                     'Ein Pin wird aus Ausgang konfiguriert PC0 (also Pin0 von Port C)
    Config Pina.7 = Input                                       'Ein Pin (PA0) wird als Eingang definiert
    
    Config Portb.6 = Output                                     'Ein Pin wird aus Ausgang konfiguriert PC0 (also Pin0 von Port C)
    Config Pina.6 = Input                                       'Ein Pin (PA0) wird als Eingang definiert
    
    Config Portb.5 = Output                                     'Ein Pin wird aus Ausgang konfiguriert PC0 (also Pin0 von Port C)
    Config Pina.5 = Input                                       'Ein Pin (PA0) wird als Eingang definiert
    
    Config Portb.4 = Output                                     'Ein Pin wird aus Ausgang konfiguriert PC0 (also Pin0 von Port C)
    Config Pina.4 = Input                                       'Ein Pin (PA0) wird als Eingang definiert
    
    Config Portb.3 = Output                                     'Ein Pin wird aus Ausgang konfiguriert PC0 (also Pin0 von Port C)
    Config Pina.3 = Input                                       'Ein Pin (PA0) wird als Eingang definiert
    
    Config Portb.2 = Output                                     'Ein Pin wird aus Ausgang konfiguriert PC0 (also Pin0 von Port C)
    Config Pina.2 = Input                                       'Ein Pin (PA0) wird als Eingang definiert
    
    Config Portb.1 = Output                                     'Ein Pin wird aus Ausgang konfiguriert PC0 (also Pin0 von Port C)
    Config Pina.1 = Input                                       'Ein Pin (PA0) wird als Eingang definiert
    
    Config Portb.0 = Output                                     'Ein Pin wird aus Ausgang konfiguriert PC0 (also Pin0 von Port C)
    Config Pina.0 = Input                                       'Ein Pin (PA0) wird als Eingang definiert
    
    Do
      If Pina.7 = 1 Then
      Portb.7 = 1
      Waitms 100
      Portb.7 = 0                                               'Pin wird auf Low, also 0V geschaltet
      Waitms 100
                                                 'Pin wird auf High, also 5V geschaltet
      Else
        Portb.7 = 0                                             'Pin wird auf Low, also 0V geschaltet
      End If
    
    
             If Pina.6 = 1 Then
             Portb.6 = 1
             Waitms 100
             Portb.6 = 0                                        'Pin wird auf Low, also 0V geschaltet
             Waitms 100
                                                 'Pin wird auf High, also 5V geschaltet
             Else
             Portb.6 = 0                                        'Pin wird auf Low, also 0V geschaltet
      End If
    
      If Pina.5 = 1 Then
      Portb.5 = 1
      Waitms 100
      Portb.5 = 0                                               'Pin wird auf Low, also 0V geschaltet
      Waitms 100
                                                 'Pin wird auf High, also 5V geschaltet
      Else
        Portb.5 = 0                                             'Pin wird auf Low, also 0V geschaltet
      End If
    
    
             If Pina.4 = 1 Then
             Portb.4 = 1
             Waitms 100
             Portb.4 = 0                                        'Pin wird auf Low, also 0V geschaltet
             Waitms 100
                                                 'Pin wird auf High, also 5V geschaltet
             Else
             Portb.4 = 0                                        'Pin wird auf Low, also 0V geschaltet
      End If
    
        If Pina.3 = 1 Then
      Portb.3 = 1
      Waitms 100
      Portb.3 = 0                                               'Pin wird auf Low, also 0V geschaltet
      Waitms 100
                                                 'Pin wird auf High, also 5V geschaltet
      Else
        Portb.3 = 0                                             'Pin wird auf Low, also 0V geschaltet
      End If
    
    
             If Pina.2 = 1 Then
             Portb.2 = 1
             Waitms 100
             Portb.2 = 0                                        'Pin wird auf Low, also 0V geschaltet
             Waitms 100
                                                 'Pin wird auf High, also 5V geschaltet
             Else
             Portb.2 = 0                                        'Pin wird auf Low, also 0V geschaltet
      End If
    
        If Pina.1 = 1 Then
      Portb.1 = 1
      Waitms 100
      Portb.1 = 0                                               'Pin wird auf Low, also 0V geschaltet
      Waitms 100
                                                 'Pin wird auf High, also 5V geschaltet
      Else
        Portb.1 = 0                                             'Pin wird auf Low, also 0V geschaltet
      End If
    
    
             If Pina.0 = 1 Then
             Portb.0 = 1
             Waitms 100
             Portb.0 = 0                                        'Pin wird auf Low, also 0V geschaltet
             Waitms 100
                                                 'Pin wird auf High, also 5V geschaltet
             Else
             Portb.0 = 0                                        'Pin wird auf Low, also 0V geschaltet
      End If
    
    
      Loop
    
    
    End
    Hierbei lässt sich schön erkennen, wie der Microcontroller das Programm der Reihe nach abarbeitet. Aber wie könnte ich das Programm ändern damit alle gleichzeitig aufblinken?

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Do 'Anfang der Schleife

    Portb = Pina 'Alles was an Pina ne 1 hat bekommt an B auch ne 1

    waitms 100 'Gedenkminute

    Portb=0 'Alle weider aus. Zum einen wegen blinken zum anderen sowieso, falls der Schalter aus ist.

    waitms 100 'sonst würden alle sofort wieder eingeschaltet werden.

    Loop 'play it again



    Probier das mal aus. Ich hab's nicht getestet, könnte aber klappen.

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.08.2004
    Ort
    Potsdam
    Beiträge
    190
    Kleine Anmerkung zur Portkonfiguration:
    Du kannst die Ports insgesamt mit "Config Portx = Input" /// "Config Porty = Output" als Ein- oder Ausgang definieren.
    Sollen an einem Port einige Pin's als Eingang und einige als Ausgang definiert werden sähe das dann so aus.
    Config Portx = &B11110000
    Hier sind Pin 0 bis 3 als Eingang und Pin 4 bis 7 als Ausgang geschaltet.
    Deine Variante geht freilich auch, erzeugt aber etwas mehr Schreibarbeit. Ob es mehr Code erzeugt entzieht sich meiner Kenntniss

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Code:
    $regfile = "m16def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 8000000
    
    Config Pina = Input
    Config Portb = Output
    
    Do
    
    Portb = Pina
    Waitms 100
    Portb=0
    Waitms 100
    
    Loop
    
    End
    So sieht's besser aus

    @E-Fan: Der Code wird nicht größer, wenn man jeden Pin einzeln einstellt. Bascom "rechnet" alles zusammen.
    (Nur so am Rande, damit die Frage nicht offen stehen bleibt)

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.08.2004
    Ort
    Potsdam
    Beiträge
    190
    Meinste das klappt mit Portb=Pina? - denke eher das Pinb.x=Pina.x eher klappen würde. Ansonsten versucht man ja ein ganzes Byte in ein Bit reinzuschreiben. - oder hab ich nen Hitzekoller?

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad