Programmieren von Mikrocomputern in
     automatisierten Systemen

     Automatisieren und Vernetzen mit Industrie-PC

 
 
Sitemap ::info-rlp :: PSPICE  :: Elektrotechnik-Basics :: C-Programmierung :: AT04 :: ELI04 :: C51 :: 
 
 Pfad ::: ELI04 / Mikrocontroller / Förderband-Situation

 

 

1.2     
 

Projekte realisieren
 
 
  1.2.6.1  Förderband-Situation   -    ELI04  
         
       
   
 1.                                                                   
zum Anfang der Seite  So schaut´s aus

                              

 
   
 2.                                                                   
zum Anfang der Seite ELI04:
Problemformulierung

Ausgangssituation

Werkstücke werden in gleichgroße Würfel zugeschnitten
und über ein Förderband zur Lackierstation transportiert.

Problemstellung:

- Werkstücke werden nicht richtig getrennt

- Keine vollständige Lackierung



 

 
   
 3.                                                                   
zum Anfang der Seite Mögliche Lösungsansätze



- Maße des Würfels überprüfen / Lichtschranke (Dauer der Unterbrechung)

- Ist ein Würfel vorhanden/ soll Band laufen

- Laufzeit des Förderbandes (Position der aktuellen Würfel / Anfang - Mitte - Ende)

- liegt eine Anforderung für neue Würfel zur Lackierung an

 

 
       
   
 4.                                                                   
zum Anfang der Seite ELI04:
Planung für die heutigen
vier Schulstunden

Ausarbeitung in Einzel- / Partnerarbeit

1. Programmablaufplan erstellen

2. Schreibtischtest/ Arbeitsfortschritt überprüfen im Plenum,
    Programmablaufplan auf einem Plakat vorstellen Termin: 11:30 Uhr

3. Quellcode erstellen 20 min

4. Funktionstest 15 min

5. Besprechung der einzelnen Ergebnisse 15 min


 

 
   
 5.                                                        
zum Anfang der Seite Anbindung der
Lichtschranken an das
LPC900-Board - Vorschläge
Hier mit Operationsverstärker
H. Ströher, J. Lindner

Hinweis:

Die Simulationen in PSPICE und Elektina lassen vermuten, dass die Schaltungen auch in der Praxis funktionieren sollten.

Dem ist leider nicht so!

Durch eine unsymmetrische Stromversorgung verhält sich der OPV nicht wie in der Simulation. Die am Ausgang erwarteten 0,4 V liegen im praktischen Aufbau bei 2,4 V.
Für unsere Anwendung so leider nicht einsetzbar!




  zum Anzeigen der Schaltskizzen auf die Grafik klicken

- Schaltskizzen als StarOffice-Datei - H. Ströher






  zum Anzeigen der Schaltskizzen auf die Grafik klicken

- Schaltskizzen als StarOffice-Datei


- PSPICE-Simulations-Datei
 





















 

 6.                                                                                         
zum Anfang der Seite Anbindung der
Lichtschranken an das
LPC900-Board
Hier mit Transistor

 








 zum Anzeigen der Schaltskizzen auf die Grafik klicken

- Schaltskizzen als StarOffice-Datei


- PSPICE-Simulations-Datei
 






 zum Anzeigen der Schaltskizzen auf die Grafik klicken

- Schaltskizzen als StarOffice-Datei


- PSPICE-Simulations-Datei
 



BC140 Data Sheet - Philips


weitere Themen zur Transistortechnik
Transistor-Grundschaltungen
Emitterschaltung
Kollektorschaltung
Basisschaltung
Transistor als Schalter
Transistorkennlinien
Schalten und Steuern mit Transistoren
 

 
       
   
 7.                                                                   
zum Anfang der Seite ELI04:
Lösungen der einzelnen Teams
   
Team 1 (bra, pin):
  Programmablaufplan (gif)
  Programmablaufplan - Vis (gif)
- - Programmablaufplan als StarOffice-Datei,
   Achtung .odg !!! In StarOffice 7 nicht lesbar, besser als .sxd
  Quellcode (txt)




Team 1

Team 2

Team 3

Team 4

Team 5

Team 6



 
 
Team 2: (sti, scdt)
  Programmablaufplan (gif)
 
  Quellcode (txt)
   
Team 3:(bol,mue-sp)
  Programmablaufplan (gif)
  Programmablaufplan (pdf)
  Programmablaufplan (sxd)
   Quellcode (txt)
Team 5 (bar, ott, schn):
  Programmablaufplan (gif)
  Programmablaufplan (pdf)
- Programmablaufplan als StarOffice-Datei,

  Quellcode (txt)
  Quellcode (gif)

  Quellcode (pdf)
- Quelltext als StarOffice-Datei
   
Team 4 (hus, str, mor):
  Programmablaufplan (gif)
  Programmablaufplan (pdf)
- Programmablaufplan
  Quellcode (txt)
Team 6 (wer):
  Programmablaufplan (gif)
  Programmablaufplan (pdf)
- Programmablaufplan
  Quellcode (txt)

 
 
 
 
























 
 8.                                                                   
zum Anfang der Seite Quellcode  in der Programmiersprache C
zusätzlich Programmablaufplan zum besseren Verständnis














 

- Programmablaufplan










- Programmablaufplan
                             und Quellcode


 


/**************************************************************************************
* Stillemunkes und Schmidt                                                                   *
*                                                                                                          *
* Überprüft den Zustand von zwei Lichtschranken. Wenn beide Schranken *
* unterbrochen sind, liegt ein Fehler vor und die Fehler LED leuchtet.         *
* Wenn mindestens eine Schranke wieder öffnet, erlischt die Fehler-LED   *
* und die OK-LED leuchtet wieder.                                                          *
***************************************************************************************/

#include <reg932.h>

sbit sbSchranke1 = P3^0;
sbit sbSchranke2 = P3^1;
sbit sbOK = P1^0;
sbit sbFehler = P1^1;

main()
{
    P1M1 = 0xFC;                                                               // P1^0 und P1^1
                                                                                        // als bidirektional

    while ( 1 )
    {
        if ( ( sbSchranke2 == 0 ) && ( sbSchranke1 == 0 ) )     // Bedingung wahr
        {                                                                               // Schranken 1 u. 2
                                                                                        // unterbrochen
            sbFehler = 0;                                                         // "Fehler"-LED an
            sbOK = 1;                                                             // "OK"-LED aus
        }

       else
       {
           sbOK = 0;
           sbFehler = 1;
        }
    }
}









 
 
   
9.      
zum Anfang der Seite µVision - alles auf einem Blick:  debug-Modus ... View ... Disassembly Window  
Farbige Darstellung hier zur Veranschaulichung erweitert

Programmcounter
C-Quellcode 
Hexcode  
Assembler-Code

Kommentierung des Assembler-Codes und nachfolgende Hinweise von
Marc Schmidt


C:0x0000      020018   LJMP C:0018                                    "Langer" Sprung zur Adresse C:0x0018                            A51   PC
       18: main()
       19: {
       20: P1M1 = 0xFC;                    
       21:

C:0x0003      7591FC   MOV P1M1(0x91),#OCRCL(0xFC)     Lade den Wert „0xFC“ in den Speicher 0x91(P1M1)   A51   SFR
       22: while ( 1 )
       23: {
       24: if ( ( sbSchranke2 == 0 ) && ( sbSchranke1 == 0 ) )

C:0x0006     20B109   JB sbSchranke2(0xB0.1),C:0012    Wenn Port 3.1 (B0) nicht gesetzt, dann springe zu Adresse C:0x0012  A51
C:0x0009     20B006   JB sbSchranke1(0xB0.0),C:0012      Wenn Port 3.0 (B0) nicht gesetzt, dann Springe zu Adresse C:0x0012  
       25: {
       26: sbFehler = 0;

C:0x000C     C291      CLR sbFehler(0x90.1)                       Lösche Inhalt von Adresse 0x90.1 (Port1 Pin 1) (setze LOW) A51
       27: sbOK = 1;    
C:0x000E     D290      SETB sbOK(0x90.0)                         Setze Adresse 0x90.0 (Port1 Pin 0) (setze HIGH)                    A51
       28: }
       29:
       30: else

C:0x0010     80F4      SJMP C:0006                                    Springe zu Adresse C:0x0006                                                     A51
       31: {
       32: sbOK = 0;

C:0x0012     C290      CLR sbOK(0x90.0)                              Lösche Inhalt von Adresse 0x90.0 (Port1 Pin 0) (setze LOW)
       33: sbFehler = 1;
C:0x0014     D291      SETB sbFehler(0x90.1)                      Setze Adresse 0x90.1 (Port1 Pin 1) (setze HIGH )
       34: }
C:0x0016     80EE      SJMP C:0006                                    Springe zu Adresse C:0x0006          
                                                                                                   In der Programmiersprache C müssen globale
                                                                                                   Variablen vorerst mit 0 initialisiert werden
                                                                                                    => Löschen des RAM von 0x7F bis 0x00

C:0x0018     787F      MOV R0,#0x7F                                   Lade Register R0 mit Adresse 0x7F                                       A51
C:0x001A     E4         CLR A                                                Lösche Inhalt von Akku (setze LOW)                                       A51
C:0x001B     F6         MOV @R0,A                                       Lade Akku (LOW) in das Register mit der Adresse, die in R0
                                                                                                                       steht  (0x7F). Indirekte Adressierung                    
                  A51
C:0x001C     D8FD     DJNZ R0,C:001B                                  Decrementiere (-1) den Wert (Adresse) in Register R0 und
                                                                                                                        springe
 zu Adresse C:0x001B, wenn Wert nicht NULL     A51
C:0x001E     758107  MOV SP(0x81),#0x07                           Schreibe in den Stack (SP) die Adresse 0x07
C:0x0021      020003  LJMP main(C:0003)                              Springe zu Adresse C:0x0003
C:0x0024      00         NOP                                                    No Operation (bewirkt auch kurze Pause)                            A51
C:0x0025      00         NOP

Darstellung der Assembler-Befehle im Buch C51 / Philips LPC900 Hardware-Software-Toolchain (M. Baldischweiler) ab Kapitel 11, Unterkapitel 2 erläutert Programmablauf und Adressenstruktur des 8051-Mikrocontrollers.

Stack (SP):            enthält Adresse des nächsten Befehl (Speicherplatzes)

JNB badr, rel:         Wenn Wert von badr = 0 springe zum relativen Punkt des Programmzählers.

    - Programmschritte werden über Zyklen berechnet. Pro Zyklus werden 2 bit eingelesen.
      Jeder Befehl benötigt 1-3 Zyklen, um ausgeführt zu werden. Der Befehl JNB benötigt 2 Zyklen.
      Im ersten wird badr und im zweiten wird rel eingelesen. Die Zieladresse des Sprungbefehls
      berechnet sich dann über die Zyklen, die nicht ausgeführt werden.

Löschen RAM:       Der RAM umfasst die Adresse 0x00 bis 0x7F. Dies ist der dat/ idata und bdata Bereich.
     Ab Adresse  0x80 liegt der SFR Bereich, in dem die Funktionen des Controllers hinterlegt sind.
     Mit der RAM-Lösch-Sequenz werden somit alle Variablen gelöscht und können danach neu
     deklariert werden. Zum Löschen werden ca. 730 Programmschritte benötigt.

Adresse C:0x0003: Enthält normalerweise die Einstiegsadresse des Interrupt 0.  


     

 
   
10.  
zum Anfang der Seite Quellcode in der
hexadezimalen Darstellung



     

 
   
11.  
zum Anfang der Seite Test mit dem LPC-Board

 
   zum Vergrößern auf die Grafik klicken    zum Vergrößern auf die Grafik klicken

  Foto: B. Werner ELI04

     

 
         
         
    Quellennachweis:
Grafik der "Lernbausteine" der Original-LEGO-Website entnommen
   

 

    :: Stand :: 13.06.2005
  
    :: Glossar :: Block diagram :: Memory :: Special function registers :: Philips P89LPC93X :: Siemens A51 Pocket-Guide
 
              Beratender Fachlehrer: