www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC 16F84A+SN7447 Wie ansteuern?


Autor: Steffen PIC (schally)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
also ich bin ein absoluter Neuling in Sachen PIC dass erst mal vorraus.
Ich muss als abschlussprojekt für meine Schule ein Thermometer bauen.
So ich habe einen BCD zu 7Segment Decoder den SN74LS47N und 3-7Segment 
Anzeigen mit gemeinsamer Anode die über 3 Transistoren geschaltet werden 
dies ist kein Problem.Mein Problem ist es das ich nicht weiss wie ich 
den SN74LS47N ansteuern wegen dem HIGH und LOW wenn ich nach der Tabelle 
aus dem Datenblatt gehe bekomme ich nichts gescheites dabei herraus!

Kann mir bitte jemand von euch helfen?

mfg
schally

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst /LT, /RBI und /BI auf log. 1 (high) setzen.
a..g an die Kathoden der 7-Segment-Anzeigen,
An A..D legst Du die Daten.
Und natürlich VCC und GND anschliessen.

Viel Spass

Severino

Autor: Steffen PIC (schally)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Severino R. wrote:
> Du musst /LT, /RBI und /BI auf log. 1 (high) setzen.
> a..g an die Kathoden der 7-Segment-Anzeigen,
> An A..D legst Du die Daten.
> Und natürlich VCC und GND anschliessen.
>
> Viel Spass
>
> Severino

Kann ich also einfahc hingehn und /LT, /RBI und /BI einfahc an GND 
anschliessen müsste doch auch gehn oder?

mfg
schally

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, die musst Du eben auf z.B. +5V legen.

High = logisch 1 = +5V (VCC)
Low  = logisch 0 = 0V  (GND)

Alles klar?

Severino

Autor: Steffen PIC (schally)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Severino R. wrote:
> Nein, die musst Du eben auf z.B. +5V legen.
>
> High = logisch 1 = +5V (VCC)
> Low  = logisch 0 = 0V  (GND)
>
> Alles klar?
>
> Severino

Hi,
danke erstmal .
Ich melde mich gleich wieder.;-)

mfg
schally


Autor: Steffen PIC (schally)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So habe nun die netsprechenden Pins an +5V gelötet.
aber wenn ich eine 1 senden will mit dem Assemblerbefehl
BSF IA ;Dezimal 1
sendet er mir nichts !

mfg
schally

ps:
; RB,0 --> BCD/7 Segement Decoder Eingang IA 
*
; RB,1 --> BCD/7 Segement Decoder Eingang IB 
*
; RB,2 --> BCD/7 Segement Decoder Eingang IC 
*
; RB,3 --> BCD/7 Segement Decoder Eingang ID 
*
; RB,4 --> BCD/7 Segement Decoder Eingang LT 
*
; RB,5 -->Transistor 1 für Anzeige 1 zu schalten 
*
; RB,6 -->Transistor 2 für Anzeige 2 zu schalten 
*
; RB,7 -->Transistor 3 für Anzeige 3 zu schalten 
*
;*********************************************************************** 
********

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du solltest schon etwas mehr als nur eine Instruktion Deines Programms 
posten, da so nicht ersichtlich ist, was IA ist.
Ausserdem setzt bsf nur ein einzelnes Bit. Du musst aber vier Bits 
setzen.
Hast Du Dein Port richtig initialisiert?
Und schliesslich ist ein Schema nützlich, um zu sehen, wohin Deine Bits 
gelangen.

Severino

Autor: Steffen PIC (schally)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
; ******************************************************************************
; * Thermometer.asm - Abschlussprojekt HBFI05a von Steffen Schalhorst          *
; ******************************************************************************                                                                               
; Mit Hilfe des PIC-Mikrocontroller 16F84A soll mit Hilfe des 1-Wire           *
; Sensors DS18S20 ein Thermometer aufgebaut werden.                            *
; Der PIC bekommt die Daten über den Port RA,0.                                *
; Die gemessenen Werte werden BCD codiert und an einen BCD/7-Segement          *
; Decoder gesendet der diesen Wert an die Entsprechenden Anzeigen sendet       *
; die nacheinander Eingeschaltet werden.                                       *
; ******************************************************************************         
; EINGÄNGE:                                                                    *
;                                                                              *           
; RA,0 --> 1-Wire Sensor DS18S20                                                *
; RA,1 --> Taster 1 Höchste Temp.                                              *
; RA,2 --> Taster 2 Niedrigste Temp.                                           *
; ******************************************************************************                                    
; AUSGÄNGE:                                                                    *
;                                                                              *                                      
; RB,0 --> BCD/7 Segement Decoder Eingang IA                                   *
; RB,1 --> BCD/7 Segement Decoder Eingang IB                                   *
; RB,2 --> BCD/7 Segement Decoder Eingang IC                                   *
; RB,3 --> BCD/7 Segement Decoder Eingang ID                                   *
; RB,4 --> BCD/7 Segement Decoder Eingang LT                                                                            *
; RB,5 -->Transistor 1 für Anzeige 1 zu schalten                               *
; RB,6 -->Transistor 2 für Anzeige 2 zu schalten                               *
; RB,7 -->Transistor 3 für Anzeige 3 zu schalten                               *
;*******************************************************************************

;*******************************************************************************
;* Bestimmung des Prozessortyps für den Assembler und das Programmiergerät     *
;*******************************************************************************
    LIST p=16F84A
;*******************************************************************************
;* Includedatei für den 16F84A einbinden (vordef. Reg. und Konst.)             *
;*******************************************************************************

    #include <p16f84A.INC>

; Diese Datei enthält Vordefinitionen für wichtige Register und Konstanten.
; (Z.B. gibt es die Konstante PORTB mit der sich ohne Angabe der
; absoluten Adresse H'0006' der Port B des Prozessors ansprechen lässt)


;*******************************************************************************
;* Konfigurationseinstellungen für IC-Prog vordefinieren                       *
;*******************************************************************************

    __CONFIG _PWRTE_ON & _CP_OFF & _HS_OSC & _WDT_OFF

; Hier werden verschiedene Prozessoreigenschaften festgelegt:
; PWRTE_ON schaltet den Power Up Timer ein, d.h. der Prozessor wartet nach
; dem Einschalten ca. 70ms mit dem Programmstart, um sicher zu sein,
; dass alle angeschlossene Peripherie bereit ist.
; CP_OFF schaltet die Code-Protection des Prozesors aus. Damit ist das im Prozessor
; befindliche Programm jederzeit auslesbar und überschreibbar.
; HS_OSC spezifiziert einen Quarzoszillator (Highspeed) als Zeitbasis für den Prozessor.
; WDT_OFF schaltet den Watchdog-Timer des Prozesors aus.


;*******************************************************************************
;*                         Register / Variablen  festlegen                     *
;*******************************************************************************
; hier werden Adressen von Registern / Variablen festgelegt. Diese werden beginnend
; mit der Adresse H'20' aufsteigend vergeben.
  CBLOCK  H'20'
           sensor   ; Variable wird benutzt um den ausgelesenen ByteCode vom Sensor geschrieben
    bcd_wert ; Variable in den der Umgewandelte Wert von Sensor geschrieben wird
    
    wait
           wait_1
           wait_2
    
        
  ENDC
;*******************************************************************************
;*                         Konstanten festlegen                                * 
;*******************************************************************************

; Hier sollten alle im Verlauf des Programms verwendeten Konstanten deklariert werden.
; Die Deklaration sieht z.B. folgendermaßen aus:

;*******************************************************************************
;*  Definition von einzelnen Bits in einem Register / in einer Variable        *
;*******************************************************************************
; hier kann mit Hilfe der #DEFINE Direktive einzelnen Bits in einem Register ein
; Name zugewiesen werden.
; Eine Definition sieht z.B. folgendermaßen aus:
;
;*******************************************************************************
;*       Name       *       Port       * Bedeutung / Funktion                  *
;*******************************************************************************
#DEFINE  Sensor            PORTA,0        ;Anschluss für 1-Wire Sensor
#DEFINE  TH                PORTA,1        ;Taster für höchste Temperatur -->TH =Temp High 
#DEFINE  TL                PORTA,2        ;Taster für niedrigste Temperatur -->TL =Temp Low 
;*******************************************************************************
#DEFINE  IA                PORTB,0        ;BCD Decoder Eingang IA  
#DEFINE  IB                PORTB,1        ;BCD Decoder Eingang IB 
#DEFINE  IC                PORTB,2        ;BCD Decoder Eingang IC 
#DEFINE  ID                PORTB,3        ;BCD Decoder Eingang ID
;*******************************************************************************
#DEFINE  T1                PORTB,7        ;Transistor T1 --> Für Anzeige 1
#DEFINE  T2                PORTB,6        ;Transistor T2 --> Für Anzeige 2
#DEFINE  T3                PORTB,5        ;Transistor T3 --> Für Anzeige 3  
#DEFINE  bank1    STATUS, RP0 ;Spezielle Register Bank
;*******************************************************************************
;*******************************************************************************
;*                                  Programmstart                              *
;*******************************************************************************
  ORG  H'00'    ; Das Programm wird ab Speicherstelle 0 in den Speicher geschrieben
  GOTO  init    ; Springe zur Grundinitialisierung der Ports A und B
;*******************************************************************************
;*                                  Initialisierung                            *
;*******************************************************************************
init  BSF  bank1    ; wechsle zu Registerbank 1 (spezielle Register)
  MOVLW  B'00011111'
  MOVWF  TRISA    ; RA0 .. RA4 Eingänge
  MOVLW  B'00000000'
  MOVWF  TRISB    ; RB0-RB7 Ausgänge
  BCF  bank1    ; wechsle zu Registerbank 0 (normaler Speicherbereich)
        
  CLRF  PORTA    ; Port A löschen
  CLRF  PORTB    ; Port B löschen
        
; Die Register TRISA und TRISB legen fest, welche Bits in den jeweiligen Ports Ein- bzw.
; Ausgänge sind. Eine '1' an der entsprechenden Stelle setzt das Bit des Ports als Ein-
; gang eine '0' setzt das Bit als Ausgang.
;*******************************************************************************
;*                                  Hauptprogramm                              *
;*******************************************************************************
main
         BSF T3         
         BSF IA
         
         
         
         
         
         
         

        
;*******************************************************************************
;*                                 Unterprogramme                              *
;*******************************************************************************



UP_wait1s
      ;4999993 cycles
  movlw  0x2C
  movwf  wait
  movlw  0xE7
  movwf  wait_1
  movlw  0x0B
  movwf  wait_2
UP_wait1s_0
  decfsz  wait, f
  goto  $+2
  decfsz  wait_1, f
  goto  $+2
  decfsz  wait_2, f
  goto  UP_wait1s_0

      ;3 cycles
  goto  $+1
  nop

      ;4 cycles (including call)
  return
         
END
so hier mal der Code
ich muss ja nur ein Bit setztn da die andern ja automatisch auf null 
sind oder?
falls nicht wie setzte ich es auch 0?
Datenblatt des BCD Decoders

http://www.ortodoxism.ro/datasheets2/c/0g2l9c1e4yo...

mfg
schally

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Ports sind nicht automatisch auf null, aber Du setzt sie ja selber 
auf null. Mir fällt nichts Seltsames auf, es müsste ja funktionieren.

Etwas allerdings: Du solltest am Schluss von Deinem main, vor dem 
Unterprogramm, einen Sprung auf sich selber oder auf main einfügen, da 
sonst das Programm durchläuft und wohl wieder von Anfang an startet, 
dabei die Ports wieder auf 0 setzt etc.

Kannst Di mit einem Oszi schauen, was RB0 ausgibt?

Severino

Autor: Steffen PIC (schally)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
habe leider kein Oszi...
So ich werde nun nochmal dieses Board nochmal neu löten...

mfg
schally

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst Dein Programm auch im MPLAB SIM Simulator laufen lassen und 
dann in Watch-Fenster schauen, was RB0 ausgigt.
Wenn es hier stimmt, liegt das Problem wahrscheinlich an der Hardware.

Severino

Autor: Steffen PIC (schally)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok werde mir dieses TOOL mal runterladen und schauen was es ausgibt!

mfg
schally

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
MPLAB SIM ist in MPLAB integriert.
Ich nehme jetzt mal an, dass Du mit MPLAB arbeitest. Jedenfalls kennen 
ich für Assembler-Programmierung von PICs nichts Besseres.

Menü Debugger -> Select Tool -> MPLAB SIM

Severino

Autor: Steffen PIC (schally)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
wie seh ich das was der macht?

mfg
schally

kannst du vvl nicht mal schauen?

Autor: Severino R. (severino)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Also, in MPLAB SIM werden die Bits korrekt gesetzt.

Beiliegend das fertige Projekt mit Watch-Fenster und gesetztem 
Breakpoint.

Du öffnest den Workspace (File->Open Workspace), drückst anschliessend 
F9 um das Programm zu starten, dann sieht Du, dass er an die erste 
Instruktion in main springt. Nun kannst Du mit F7 Schritt für Schritt 
durch Dein Programm gehen und im Watch-Fenster das PORTB beobachten, wie 
es sich verändert. Am besten in der Spalte "Binary".

Viel Spass

Severino

Autor: Steffen PIC (schally)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok dann muss es wohl an der Hardware liegen also später nochmal schauen 
ob ich was vergessen hab usw...

Thx erstmal meld mich nochmal

mfg
schally

Autor: Steffen PIC (schally)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So mein Probwar das ich an den OC Ausgängen des ULN2803 gehangen habe 
und nicht direkt am PIC.

und wie schalte ich die Transistoren jetzt aus?
weil ich lade

MOVLW B'0001';Zahl 1 ins W-Register laden
MOVWF PORTB ;Gebe diese jetzt aus

ps:hier mal en vid
http://steffen-schalhorst.de/HBFI_05c/Abschlusspro...


mfg
schally

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Steffen S. wrote:
> So mein Probwar das ich an den OC Ausgängen des ULN2803 gehangen habe
> und nicht direkt am PIC.

Davon hast Du aber nichts erwähnt.

>
> und wie schalte ich die Transistoren jetzt aus?

welche jetzt: die einzelnen im Video oder die im ULN2803 ?
> weil ich lade
>
> MOVLW B'0001';Zahl 1 ins W-Register laden
> MOVWF PORTB ;Gebe diese jetzt aus

Versuch mal:
MOVLW B'0000' ; 1 = ein; 0 = aus (?!)
MOVWF PORTB

>
> ps:hier mal en vid
> http://steffen-schalhorst.de/HBFI_05c/Abschlusspro...

Toll, danke für den Feedback. Es funktioniert ja!

Severino

Autor: Steffen PIC (schally)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
hier der Schaltplan

http://steffen-schalhorst.de/HBFI_05c/Abschlusspro...

Transistoren BC557C PNP.

Funzt auch net weil dann zeigt er mir die 000 an (wegen den 3 7Segment 
Anzeigen)

mfg
schally

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mir stellt sich die Frage, warum man überhaupt so einen uralt 7447 
TTL-Chip an nen MC dranpappen sollte ?

So ein kleines bischen Tabellenzugriff von Ziffer auf 7-Segment-Code 
sollte doch sogar auch ein PIC schaffen.

Wenns nur ums Pin sparen geht, würde ich nen 74HC164 dranpappen (2 -> 8 
Pins).


Peter

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Steffen S. wrote:

> Funzt auch net weil dann zeigt er mir die 000 an (wegen den 3 7Segment
> Anzeigen)

Und was ist daran nicht gut?

Kannst Du bitten etwas klarer darstellen, was Du wie erreichen willst, 
und was stattdessen geschieht?

Im Übrigen hat Peter Dannegger schon recht, warum überhaupt den 7447?

Severino

Autor: schally (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
weil ich den in der schule behandelt habe...

mfg
schally

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ schally

Steffen S. wrote:
[..]
> Mein Problem ist es das ich nicht weiss wie ich
> den SN74LS47N ansteuern wegen dem HIGH und LOW wenn ich nach der Tabelle
> aus dem Datenblatt gehe bekomme ich nichts gescheites dabei herraus!
>
> Kann mir bitte jemand von euch helfen?
>
> mfg
> schally

und jetzt

> weil ich den in der schule behandelt habe...

Du hast ihn in der Schule behandelt und weisst nicht, wie Du ihn 
ansteuern sollst???

Jedenfalls: Funktioniert nun Dein Projekt?

Severino

Autor: Steffen PIC (schally)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch nicht ganz habe noch etliche Problme mit dem Ansteuern des 1-Wire 
Sensors DS18S20....
hat vvl jemand en guten Link dazu wo das mal ein bissjen erklärt wird?

mfg
schally

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Steffen PIC (schally)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Severino R. wrote:
> hier vielleicht:
> http://elektronik.kai-uwe-schmidt.de/index.php?pag...
>
> oder hier mit C-Sourcecode:
> http://wiki.atrox.at/index.php/Simple_1wire_PIC_Program

hi
darauf bin ich auch schon gestossen aber ich bekomme es einfach nicht 
hin...

mfg
schally

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.