-         

Ergebnis 1 bis 6 von 6

Thema: Dot Matrix mit MAX 7219 Ansteuerung mit PIC 16F84A

  1. #1

    Dot Matrix mit MAX 7219 Ansteuerung mit PIC 16F84A

    Anzeige

    Hallo nun ich will mein Display mit dem Max 7219 ansteuern dieser soll dann einen Buchstaben ausgeben:

    Variablenfestlegung:
    Code:
    	CBLOCK	H'20'
    		variable1	; das Wort variable1 entspricht der Adresse H'20'
    		zaehl		; das Wort zaehl entspricht der Adresse H'21'
    		register
    		sendregister
    		value
    		temp
    		z1
        z2
        z3
    	ENDC

    Hauptprogamm und unterprogramm:

    Code:
    ;*****************
    ;* Hauptprogramm *
    ;*****************
    
    main     
      BSF PORTB,1       ;setze Bit des Registers PORTB,1 
      GOTO up_initmax   ;gehe zu up_initmax
      GOTO up_zeichen   ;gehe zu up_zeichen
      GOTO up_warte    ;gehe zu up_warten
      GOTO main         ;gehe zu main
    
    
    
      
    
      
    ;******************
    ;* Unterprogramme *
    ;******************
    up_warte                    ;warteschleife
             MOVLW    D'170'    ;lade W-Register mit D'170'
             MOVWF    z1        ;kopiere W-Register nach z1
    outer  
             MOVLW    D'120'    ;lade W-Register mit D'120'
             MOVWF    z2        ;kopiere W-Register nach z2
    middle      
             MOVLW    D'70'     ;lade W-Register mit D'70'
             MOVWF    z3        ;kopiere W-Register nach z3
    inner       
             DECFSZ   z3        ;decrementier Register z3 und springe bei 0
             GOTO     inner     ;gehe zu inner
             DECFSZ   z2        ;decrementier Register z2 und springe bei 0
             GOTO     middle    ;gehe zu middle
             DECFSZ   z1        ;decrementier Register z1 und springe bei 0
             GOTO     outer     ;gehe zu outer
             
    RETURN 
    
    up_zeichen							 ; Tabelle mit den Werten der Ausgabe
    			addwf   PCL, f     ;addiere W-Register zu PCL,f
    			retlw	b'10000000'  ;springe aus dem Unterprogramm mit der Übergabe b'10000000'
    			retlw	b'10000000'  ;springe aus dem Unterprogramm mit der Übergabe b'10000000'
    			retlw	b'10000000'  ;springe aus dem Unterprogramm mit der Übergabe b'10000000'
    			retlw	b'10000000'  ;springe aus dem Unterprogramm mit der Übergabe b'10000000'
    			retlw	b'10000000'  ;springe aus dem Unterprogramm mit der Übergabe b'10000000'
    
    			retlw	b'11000000'  ;springe aus dem Unterprogramm mit der Übergabe b'11000000'
    			retlw	b'01000000'  ;springe aus dem Unterprogramm mit der Übergabe b'01000000'
    			retlw	b'11000000'  ;springe aus dem Unterprogramm mit der Übergabe b'11000000'
    			retlw	b'01000000'  ;springe aus dem Unterprogramm mit der Übergabe b'01000000'
    			retlw	b'01000000'  ;springe aus dem Unterprogramm mit der Übergabe b'01000000'
    
    			retlw	b'11100000'  ;springe aus dem Unterprogramm mit der Übergabe b'11100000'
    			retlw	b'00100000'  ;springe aus dem Unterprogramm mit der Übergabe b'00100000'
    			retlw	b'11100000'  ;springe aus dem Unterprogramm mit der Übergabe b'11100000'
    			retlw	b'00100000'  ;springe aus dem Unterprogramm mit der Übergabe b'00100000'
    			retlw	b'00100000'  ;springe aus dem Unterprogramm mit der Übergabe b'00100000'
    
    			retlw	b'11110000'  ;springe aus dem Unterprogramm mit der Übergabe b'11110000'
    			retlw	b'00010000'  ;springe aus dem Unterprogramm mit der Übergabe b'00010000'
    			retlw	b'11110000'  ;springe aus dem Unterprogramm mit der Übergabe b'11110000'
    			retlw	b'00010000'  ;springe aus dem Unterprogramm mit der Übergabe b'00010000'
    			retlw	b'00010000'  ;springe aus dem Unterprogramm mit der Übergabe b'00010000'
    
    			retlw	b'11111000'  ;springe aus dem Unterprogramm mit der Übergabe b'11111000'
    			retlw	b'10001000'  ;springe aus dem Unterprogramm mit der Übergabe b'10001000'
    			retlw	b'11111000'  ;springe aus dem Unterprogramm mit der Übergabe b'11111000'
    			retlw	b'10001000'  ;springe aus dem Unterprogramm mit der Übergabe b'10001000'
    			retlw	b'10001000'  ;springe aus dem Unterprogramm mit der Übergabe b'10001000'
    
    			retlw	b'01111100'  ;springe aus dem Unterprogramm mit der Übergabe b'01111100'
    			retlw	b'01000100'  ;springe aus dem Unterprogramm mit der Übergabe b'01000100'
    			retlw	b'01111100'  ;springe aus dem Unterprogramm mit der Übergabe b'01111100'
    			retlw	b'01000100'  ;springe aus dem Unterprogramm mit der Übergabe b'01000100'
    			retlw	b'01000100'  ;springe aus dem Unterprogramm mit der Übergabe b'01000100'
    
    			retlw	b'00111110'  ;springe aus dem Unterprogramm mit der Übergabe b'00111110'
    			retlw	b'00100010'  ;springe aus dem Unterprogramm mit der Übergabe b'00100010'
    			retlw	b'00111110'  ;springe aus dem Unterprogramm mit der Übergabe b'00111110'
    			retlw	b'00100010'  ;springe aus dem Unterprogramm mit der Übergabe b'00100010'
    			retlw	b'00100010'  ;springe aus dem Unterprogramm mit der Übergabe b'00100010'
    
    			retlw	b'00011111'  ;springe aus dem Unterprogramm mit der Übergabe b'00000000'
    			retlw	b'00010001'  ;springe aus dem Unterprogramm mit der Übergabe b'00010001'
    			retlw	b'00011111'  ;springe aus dem Unterprogramm mit der Übergabe b'00000000'
    			retlw	b'00010001'  ;springe aus dem Unterprogramm mit der Übergabe b'00010001'
    			retlw	b'00010001'  ;springe aus dem Unterprogramm mit der Übergabe b'00010001'
    
    			retlw	b'00001111'  ;springe aus dem Unterprogramm mit der Übergabe b'00001111'
    			retlw	b'00001000'  ;springe aus dem Unterprogramm mit der Übergabe b'00001000'
    			retlw	b'00001111'  ;springe aus dem Unterprogramm mit der Übergabe b'00001111'
    			retlw	b'00001000'  ;springe aus dem Unterprogramm mit der Übergabe b'00001000'
    			retlw	b'00001000'  ;springe aus dem Unterprogramm mit der Übergabe b'00001000'
    
    			retlw	b'00000111'  ;springe aus dem Unterprogramm mit der Übergabe b'00000111'
    			retlw	b'00000100'  ;springe aus dem Unterprogramm mit der Übergabe b'00000100'
    			retlw	b'00000111'  ;springe aus dem Unterprogramm mit der Übergabe b'00000111'
    			retlw	b'00000100'  ;springe aus dem Unterprogramm mit der Übergabe b'00000100'
    			retlw	b'00000100'  ;springe aus dem Unterprogramm mit der Übergabe b'00000100'
    
    			retlw	b'00000011'  ;springe aus dem Unterprogramm mit der Übergabe b'00000011'
    			retlw	b'00000010'  ;springe aus dem Unterprogramm mit der Übergabe b'00000010'
    			retlw	b'00000011'  ;springe aus dem Unterprogramm mit der Übergabe b'00000011'
    			retlw	b'00000010'  ;springe aus dem Unterprogramm mit der Übergabe b'00000010'
    			retlw	b'00000010'  ;springe aus dem Unterprogramm mit der Übergabe b'00000010'
    
    			retlw	b'00000001'  ;springe aus dem Unterprogramm mit der Übergabe b'00000001'
    			retlw	b'00000001'  ;springe aus dem Unterprogramm mit der Übergabe b'00000001'
    			retlw	b'00000001'  ;springe aus dem Unterprogramm mit der Übergabe b'00000001'
    			retlw	b'00000001'  ;springe aus dem Unterprogramm mit der Übergabe b'00000001'
    			retlw	b'00000001'  ;springe aus dem Unterprogramm mit der Übergabe b'00000001'
    
    			retlw	b'00000000'  ;springe aus dem Unterprogramm mit der Übergabe b'00000000'
    			retlw	b'00000000'  ;springe aus dem Unterprogramm mit der Übergabe b'00000000'
    			retlw	b'00000000'  ;springe aus dem Unterprogramm mit der Übergabe b'00000000'
    			retlw	b'00000000'  ;springe aus dem Unterprogramm mit der Übergabe b'00000000'
    			retlw	b'00000000'  ;springe aus dem Unterprogramm mit der Übergabe b'00000000'
    ;------------------------
    up_initmax      ;max initialisierung
    
      Banksel TRISB ;Umschalten auf die Datenspeicherbank TRISB
      bcf TRISB,1   ;lösche Bit des Registers TRISB,1
      bcf TRISB,2   ;lösche Bit des Registers TRISB,2
      bcf TRISB,0   ;lösche Bit des Registers TRISB,0
      
      Banksel PORTB ;Umschalten auf die Datenspeicherbank PORTB
      bsf PORTB,1   ;setze PORTB,1 LOAD_PORT
      bcf PORTB,2   ;lösche PORTB,2 CLK_PORT
      
    
     call clear       ;rufe clear auf
     movlw b'00001111';lade W-Register mit D'170'
     call intensity   ;rufe clear auf
     movlw b'11111111';lade W-Register mit D'170'
     call decodemode  ;rufe clear auf
     movlw b'00000111';lade W-Register mit D'170'
     call scanlimit   ;rufe clear auf
     movlw b'00000001';lade W-Register mit D'170'
     call shutdown    ;rufe clear auf
     movlw b'00000000';lade W-Register mit D'170'
     call displaytest ;rufe clear auf
      return            ;zurück
      
    send                ;senden
      movf register,w   ;kopiere Register 
      movwf sendregister;kopiere W-Register nach z2
      movlw d'16'       ;lade W-Register mit D'170'
      bcf PORTB,1       ;lösche PORTB,1
      
    sendloop                ;sendenschleife
      bcf PORTB,0           ;lösche PORTB,0
      btfsc sendregister,7  ;teste sendregister,7 und springe wenn gelöscht
      bsf PORTB,0           ;setze PORTB,0
      rlf value,f           ;rotiere value,f nach links durch carryflag
      rlf sendregister,f    ;rotiere sendregister,f nach links durch carryflag
      bsf PORTB,2           ;setze PORTB,2
      nop                   ;keine Operation
      bcf PORTB,2           ;lösche PORTB,2
      addlw 0xff            ;addiere Arbeitsregister mit 0xff
      btfss STATUS,Z        ;teste STATUS,Z und springe wenn gesetzt
      goto sendloop         ;geh zu sendloop
      bsf PORTB,1           ;setze PORTB,1
      return                ;zurück
      
    decodemode           ;decodemode
      movwf value       ;kopiere W-Register nach value
      movlw b'00001001' ;lade W-Register mit b'00001001'
      movwf register    ;kopiere W-Register nach register
      goto send         ;gehe zu send
      
    intensity           ;intensity
      movwf value       ;kopiere W-Register nach value
      movlw b'00001010' ;lade W-Register mit b'00001010'
      movwf register    ;kopiere W-Register nach register
      goto send         ;gehe zu send
      
    scanlimit           ;scanlimit        
      movwf value       ;kopiere W-Register nach value
      movlw b'00001011' ;lade W-Register mit b'00001011'
      movwf register    ;kopiere W-Register nach register
      goto send         ;gehe zu send
      
    displayon          ;displayon
      movlw b'00000001';lade W-Register mit b'00000001'
      goto shutdown    ;gehe zu shutdown
      
    displayoff         ;displayoff
      movlw b'00000000';lade W-Register mit b'00000000'
      
    shutdown            ;shutdown
      movwf value       ;kopiere W-Register nach value
      movlw b'00001100' ;lade W-Register mit b'00001100'
      movwf register    ;kopiere W-Register nach register
      goto send         ;gehe zu send
      
    displaytest         ;displaytest
      movwf value       ;kopiere W-Register nach value
      movlw b'00001111' ;lade W-Register mit b'00001111'
      movwf register    ;kopiere W-Register nach register
      goto send         ;gehe zu send
      
    clear
      movlw 0x00        ;lade W-Register mit D'170'
      goto send         ;gehe zu send
    
    END                 ;Programmende

    Könnt ihr mir sagen wo der Fehler liegt?

    Ach ja es werden übrigens nur 4 LED´s von der D-M-Anzeige angezeigt![/list]

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.08.2005
    Beiträge
    195
    Code:
    main      
      BSF PORTB,1       ;setze Bit des Registers PORTB,1 
      GOTO up_initmax   ;gehe zu up_initmax 
      GOTO up_zeichen   ;gehe zu up_zeichen 
      GOTO up_warte    ;gehe zu up_warten 
      GOTO main         ;gehe zu main
    dieser teil hier macht mich ein bisschen stutzig,.. der zweite goto befehl wird nie ausgeführt werden, weil er ja runtergegangen ist, und nie wieder raufkommt. evtl. verwechselst du es mit call?

    nur ein schneller versuch nach dem drüberfliegen

    SEIDL.

  3. #3
    mmh ... etwas verstutz mich auch, und zwar das er selbst ohne ein programm die 4 lichter auf dem d-m-display anzeigt.

    Könnte es ein Hardware fehler sein.

    Und benedikt. habe mir deinen rat mal zu herzen genommen und es umgeändert aber nix tut sich

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    28.05.2007
    Ort
    Haselhof
    Alter
    24
    Beiträge
    65
    Ich hab zwar keine Idee, aber den Max 7219 such ich jetzt schon seit 2 Wochen.
    Wo hast du den gekauft?

    Immer schön cool bleiben und nie aufgeben.
    Irgendwann klappts mal


  5. #5
    ich habe den bei www.reichelt.de gekauft

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    28.05.2007
    Ort
    Haselhof
    Alter
    24
    Beiträge
    65
    Danke,aber hab ihn schon vor deiner Antwort gefunden

    Immer schön cool bleiben und nie aufgeben.
    Irgendwann klappts mal


Berechtigungen

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