Die PIC Steuerplatine wird auf die maximale Anzahl von Tasten erweitert (4 Stück).
Mit diesen 4 Tasten ist es möglich eine 3 stellige Frequenz-Eingabe vorzunehmen. Diese wird am Display angezeigt.
Die Tasten haben folgende Bedeutungen:
Taste 1 - Schaltung: S2, Portleitung RB4:
Die Stelle auf der der Cursor steht wird um 1 erhöht
Taste 2 - Schaltung: S4, Portleitung RB5:
Die Stelle auf der der Cursor steht wird um 1 erniedrigt
Taste 3 - Schaltung: S3, Portleitung RB6:
Die Stelle des Cursors wird ausgewählt (Einer-, Zehner- Hunderterstelle)
Taste 4 - Schaltung: S1, Portleitung RB7:
Der eingestellte Wert wird übernommen
Mit den beiden Tastern 1 und 2 kann man die Stelle, auf der sich der Cursor gerade befindet um 1 erhöhen oder erniedrigen. Um zur nächsten Stelle zu gelangen, drückt man die Taste 3. Danach kann man diese Stelle erhöhen oder erniedrigen. Nachdem man bei der Hunderter-Stelle angelangt ist, springt der Cursor wieder auf die Einerstelle. Abgeschlossen wird die Auswahl der Frequenz durch drücken der Taste 4. Danach erscheint am Display ein OK neben der Frequenz. Sobald man eine Stelle ändert, wird dieses OK wieder gelöscht.
Dies ist eine typische Ausgabe auf dem Display im Betrieb: Nachdem die Steuerplatine eingeschalten wurde, kann man die einzelnen Stellen ändern. Wie zu sehen ist, befindet sich der Cursor _ gerade auf der Einerstelle. Der Punkt . ist ein Teil der Animation. | |
Hier ist zu sehen, dass sich der Cursor _ gerade bei der 100er Stelle befindet. Dass der Wert übernommen wurde, wird durch das OK daneben angezeigt. Das kleine o ist wieder ein Teil der Animation. |
R1,R2,R3,R4 | 12 kOhm | 4 x 0,77 ATS |
R5 | 22 Ohm | 0,77 ATS |
C2 | 100 nF | 0,20 ATS |
C5,C6 | 27 pF | 2 x 0,20 ATS |
C3 | 100 nF | 0,20 ATS |
C4 | 100 uF 16 V Elko / radial | 0,32 ATS |
IC1 | PIC 16F84 | 116,20 ATS |
IC3 | 7805 (TO-220 Gehaeuse) | 16,10 ATS |
IC3 | 74164 | 5,25 ATS |
S1,S2,S3,S4 | Taster | 4 x ca 14,00 ATS |
JP1,JP3,JP4 | 2x1, 1x1, 16x1 Stiftleiste | kleiner 15,12 ATS |
JP2 | 8x2 Stiftleiste | kleiner 21,28 ATS |
Die Preise sind ungefaehre Angaben Schuricht 98 Katalog) umgerechnet von DM auf ATS
Stiftleistenanschlüsse:
JP1 ist die Spannungsversorgung:
Pin 1 | Masse |
Pin 2 | +7 V bis +10 V |
Das Print Layout, sowie Bohrplan und Bestückungsplan sind als Ausdruck der Dokumentation hier beigefügt.
Der Bereich links oben wurde für das Display freigehalten.
Das Programm (PIC_1.ASM) besitzt, wie in der Vorgänger-Version (PIC_TST5.ASM für Ansteuerung des DSP) eine Interrupt Service Routine, welche aufgerufen wird, sobald eine der 4 Tasten gedrückt wird. Diese ISR arbeitet alle Anfragen ab und ruft die Menü-Routine menu auf.
In der ISR wird zuerst abgefragt, welche Taste gedrückt wurde. Wenn an Port B4 ein High Pegel anliegt (=Taste 1), wird zuerst abgefragt, bei welcher Stelle sich der Cursor befindet (diese steht in Speicherzelle sp7 - 0=1er Stelle, 1=10er Stelle, 2=100er Stelle) und danach wird die jeweilige Speicherzelle der Stelle um 1 erhöht (sp10=1er Stelle, sp11=10er Stelle, sp12=100er Stelle). Ist die jeweilige Stelle gerade bei 9, wird sie auf 0 zurückgesetzt.
Liegt an Port B5 ein High Pegel an (Taste 2), wird wieder ausgewertet, bei welcher Stelle sich der Cursor befindet, und die jeweilige Speicherzelle dann dekrementiert. Ist diese Stelle bei 0, wird sie auf 9 gesetzt.
Ist an Port B6 ein High Pegel aufgetreten (Taste 3), wird die Speicherzelle sp7 erhöht. Dies ist die Auswahl der Cursorposition - sprich die Stellenauswahl. Ist sp7 bei 2 (Hunderterstelle), so wird sie wieder auf 0 gesetzt (Einerstelle).
Tritt ein Highpegel an Port B7 auf (Taste 4), dann wird der eingestelle Wert übernommen. Dies geschieht indem ein Flag (Bit2 von Speicherzelle sp13 - valueok-Flag) gesetzt wird.
Da der DSP in dieser Programm Version nicht mit Daten versorgt werden muss, ist zum Abschluss der ISR nur mehr die Aktualisierung des Displays erforderlich.
Die Routine menu Schreibt dazu in der ersten Zeile des Displays DSP und danach einen Unterstrich genau über der jeweiligen Stelle. In der zweiten Zeile steht der String Wert: und danach werden einfach der Wert der jeweiligen Speicherzelle für die Stellen hintereinander ausgegeben. Ist das Flag valueok gesetzt, steht nach der eingestellten Frequenz der Schriftzug OK. Am letzten Zeichen in der 2ten Zeilen wird eine Animation abgespielt, solange der PIC in Ruhelage ist und "nichts zu tun" hat (keine Interruptanforderung).
Das PIC Programm befindet sich noch im Teststadium. Deswegen ist noch ein wenig Debug-Code enthalten. Weiters hat das Programm einige selbstkorrigierende Teile eingebaut. Diese treten z.B. bei der Anzeige des Stellencursors in der Funktion menu in Kraft. Falls sich nämlich der Wert von sp7 in einem ungültigen Bereich befindet (nicht zwischen 0 und einschließlich 2), dann wird sp7 auf 0 zurück gesetzt. Dieser Fehler kann auftreten, wenn kurzzeitig die Spannungsversorgung der PIC Steuerplatine ausfällt.
Für eine weiterführende Erklärung des Programms (Display Ausgabe), siehe Aufgabe 1 vom 14. Mai 2001 (Blockschaltbild und genaue Erklärung) bzw. http://blub2k.yi.org/dsp/ oder http://sprossenwanne.myip.org/dsp/
1: list p=16f84 2: 3: ;;------------------------------------------------------------------------ 4: ;; pic_1.asm 5: ;; (C) by Leo Eibler 20010515 (mailto:leo@sprossenwanne.at) 6: ;; LU: 20010515 7: ;; DSP Project Site: http://blub2k.no-ip.com/dsp/ 8: ;;------------------------------------------------------------------------ 9: ;; Klausurarbeit - Matura 2001: Aufgabe: 10: ;; insgesamt 4 Tasten: 2 Tasten dienen zum Aendern der derzeit ausgewaehl. 11: ;; Stelle (Taste mit Pfeil rauf & runter). Eine weitere Taste dient zum 12: ;; weitergehen auf die naechste zu aendernte Stelle. Die 4. Taste dient 13: ;; zum Uebernehmen/Bestaetigen der Werte. 14: ;; Tastendruecke (sprich high-Pegel auf den Portleitungen RB4-RB7). 15: ;; Tritt so ein high-Pegel auf, springt das Programm in eine ISR. 16: ;; 20010515: Quellcode Grundgeruest von PIC_TST5.ASM uebernommen 17: ;;------------------------------------------------------------------------ 18: ;; kompiliert wurde das Programm mit 02.50.02 19: ;; geflasht mit IC-Prog 1.01 20: ;; Einstellungen: JDM Programmer, Oscillator XT, nothing else 21: ;;------------------------------------------------------------------------ 22: 23: status equ 03h 24: rp0 equ 05h ;SpeicherBank Auswahlbit 25: rp1 equ 06h ;SpeicherBank Auswahlbit 26: intcon equ 0Bh 27: porta equ 05h 28: trisa equ 85h 29: portb equ 06h 30: trisb equ 86h 31: sp1 equ 0Ch ;Zeichenausgabe 32: sp2 equ 0Dh ;Zeichenausgabe 33: sp3 equ 0Eh ;Delay Schleife 34: sp4 equ 0Fh ;Delay Schleife 35: sp5 equ 10h ;Entprell-Delay-Schleife 36: sp6 equ 11h ;Entprell-Delay-Schleife 37: sp7 equ 12h ;Einer,Zehner,oder Hunderterstelle ? 38: sp8 equ 13h 39: sp9 equ 14h ;EnableInt,Outstate 40: sp10 equ 15h ;Einerstelle 41: sp11 equ 16h ;Zehnerstelle 42: sp12 equ 17h ;Hunderterstelle 43: sp13 equ 18h ;HT=Bit0, FIR=Bit1, ValueOk=Bit2 44: 45: ;;------------------------------------------------------------------------ 46: 47: org 00h ; Reset Vector 48: goto start 49: 50: ;;------------------------------------------------------------------------ 51: ;; ISR's 52: 53: org 004h ; Startvector (Interrupt) 54: 55: btfss sp9,7 ; Bit7 auf 0: 56: goto end_isr ; Interrupt sofort beenden 57: 58: call Entprellen 59: 60: btfsc portb,4 ; Taster an RB4 betaetigt 61: goto a1 ; um 1 nach oben 62: 63: btfsc portb,5 ; Taster an RB5 betaetigt 64: goto a2 ; um 1 nach unten 65: 66: btfsc portb,6 ; Taster an RB6 betaetigt 67: goto a3 ; zur naechsten Stelle 68: 69: btfsc portb,7 ; Taster an RB7 betaetigt 70: goto valueok ; Wert uebernehmen ! 71: 72: goto chg_nothing ; anscheinend nix von beiden ;-) 73: 74: a3: ; high-Pegel an RB6 75: movfw sp7 ; sp7 - welche stelle ? 76: sublw 02h ; sind wir bei der Hunderterstelle ? 77: btfsc status,2 78: goto stelle_einer ; ja - wir gehen wieda zur Einerstelle ! 79: incf sp7 ; nein - eine Stelle weiter 80: goto chg_nothing 81: stelle_einer: 82: clrf sp7 ; wieder zur 1er Stelle 83: goto chg_nothing 84: 85: a2: ; high-Pegel an RB5 - 1 nach unten 86: bcf sp13,2 ; Erst nach druck auf OK uebernehmen 87: movfw sp7 ; sp7 - welche stelle ? 88: sublw 00h ; einerstelle? 89: btfsc status,2 90: goto chg_einerdn ; ja - wir aendern die Einerstelle ! 91: movfw sp7 ; sp7 - welche stelle ? 92: sublw 01h ; zehnerstelle? 93: btfsc status,2 94: goto chg_zehnerdn ; ja - wir aendern die Zehnerstelle ! 95: movfw sp7 ; sp7 - welche stelle ? 96: sublw 02h ; hunderterstelle? 97: btfsc status,2 98: goto chg_hundertdn ; ja - wir aendern die Hunderterstelle ! 99: clrf sp7 ; wir sind hier her gekommen - Fehler 100: goto chg_nothing 101: 102: a1: ; high-Pegel an RB4 - 1 nach oben 103: bcf sp13,2 ; Erst nach druck auf OK uebernehmen 104: movfw sp7 ; sp7 - welche stelle ? 105: sublw 00h ; einerstelle? 106: btfsc status,2 107: goto chg_einerup ; ja - wir aendern die Einerstelle ! 108: movfw sp7 ; sp7 - welche stelle ? 109: sublw 01h ; zehnerstelle? 110: btfsc status,2 111: goto chg_zehnerup ; ja - wir aendern die Zehnerstelle ! 112: movfw sp7 ; sp7 - welche stelle ? 113: sublw 02h ; hunderterstelle? 114: btfsc status,2 115: goto chg_hundertup ; ja - wir aendern die Hunderterstelle ! 116: clrf sp7 ; wir sind hier her gekommen - Fehler 117: ;; incf sp7 ; also wieda auf 1 setzen (einerstelle) 118: goto chg_nothing 119: 120: chg_einerup: 121: movfw sp10 ; sp10 (Einerstelle) laden 122: sublw 09h ; sind wir schon bei 9 ? 123: btfss status,2 ; wenn ja, spring zu einer_rauf 124: goto einer_rauf ; Einerstelle erhoehen 125: goto einer_is_9 ; wir sind bei 9 -> wieda 0 126: 127: einer_rauf: 128: incf sp10 ; Einerstelle + 1 129: goto chg_nothing 130: einer_is_9: 131: clrf sp10 ; Einerstelle = 0 132: goto chg_nothing 133: 134: chg_einerdn: 135: movfw sp10 ; sp10 (Einerstelle) laden 136: sublw 00h ; sind wir schon bei 0 ? 137: btfss status,2 ; wenn ja, spring zu einer_rauf 138: goto einer_runter ; Einerstelle erhoehen 139: goto einer_is_0 ; wir sind bei 9 -> wieda 0 140: einer_runter: 141: decf sp10 ; Einerstelle + 1 142: goto chg_nothing 143: einer_is_0: 144: movlw 09h 145: movwf sp10 ; Einerstelle = 9 146: goto chg_nothing 147: 148: chg_zehnerup: 149: movfw sp11 ; sp11 (Zehnerstelle) laden 150: sublw 09h ; sind wir schon bei 9 ? 151: btfss status,2 ; wenn ja, spring zu einer_rauf 152: goto zehner_rauf ; Zehnerstelle erhoehen 153: goto zehner_is_9 ; wir sind bei 9 -> wieda 0 154: 155: zehner_rauf: 156: incf sp11 ; zehnerstelle + 1 157: goto chg_nothing 158: zehner_is_9: 159: clrf sp11 ; zehnerstelle = 0 160: goto chg_nothing 161: chg_zehnerdn: 162: movfw sp11 ; sp11 (Zehnerstelle) laden 163: sublw 00h ; sind wir schon bei 0 ? 164: btfss status,2 ; wenn ja, spring zu einer_rauf 165: goto zehner_runter ; Zehnerstelle erhoehen 166: goto zehner_is_0 ; wir sind bei 9 -> wieda 0 167: zehner_runter: 168: decf sp11 ; zehnerstelle + 1 169: goto chg_nothing 170: zehner_is_0: 171: movlw 09h 172: movwf sp11 ; zehnerstelle = 9 173: goto chg_nothing 174: 175: chg_hundertup: 176: movfw sp12 ; sp12 (hunderterstelle) laden 177: sublw 09h ; sind wir schon bei 9 ? 178: btfss status,2 ; wenn ja, spring zu einer_rauf 179: goto hundert_rauf ; hunderterstelle erhoehen 180: goto hundert_is_9 ; wir sind bei 9 -> wieda 0 181: 182: hundert_rauf: 183: incf sp12 ; hunderterstelle + 1 184: goto chg_nothing 185: hundert_is_9: 186: clrf sp12 ; hunderterstelle = 0 187: goto chg_nothing 188: chg_hundertdn: 189: movfw sp12 ; sp12 (Hunderterstelle) laden 190: sublw 00h ; sind wir schon bei 0 ? 191: btfss status,2 ; wenn ja, spring zu einer_rauf 192: goto hundert_runter ; Hunderterstelle erhoehen 193: goto hundert_is_0 ; wir sind bei 9 -> wieda 0 194: hundert_runter: 195: decf sp12 ; hunderterstelle + 1 196: goto chg_nothing 197: hundert_is_0: 198: movlw 09h 199: movwf sp12 ; hunderterstelle = 9 200: goto chg_nothing 201: 202: 203: valueok: 204: btfss sp13,2 ; ist der Wert Ok ? 205: goto set_valueok ; is net gsetzt, jetzt setzen ! 206: ;; bcf sp13,2 ; is scho gsetzt, jetzt loeschen 207: ;; ; Funktion ist nicht gewuenscht 208: goto chg_nothing 209: set_valueok: 210: bsf sp13,2 211: 212: chg_nothing: 213: call menu ; Menu anzeigen bzw. updaten 214: bsf sp9,6 ; Bit 6 setzen (debug) 215: end_isr: 216: bcf intcon,0 ; PortChangeInterruptFlag rueckset. 217: retfie 218: 219: ;;------------------------------------------------------------------------ 220: start: 221: bcf sp9,6 ; debug bit fuer Interrupt 222: bcf sp9,7 ; keine Interrupts erlauben 223: 224: movlw b'11110000' ; RB0-3 auf Ausg. RB4-7 auf Eing. 225: tris portb ; TrisRegister mit altem Befehl set 226: 227: movlw b'00000000' ; RA0-3 auf Ausgang 228: tris porta ; TrisRegister mit altem Befehl set 229: 230: bcf portb,2 ; LCD: Instruction Code 231: bcf portb,3 ; LCD: Enable Signal 232: bsf porta,4 ; RA4 (DSP-IRQ Leitung) auf High 233: 234: movlw 0h ; Debug Register auf 235: movwf sp8 ; 0 setzen 236: 237: clrf sp7 ; sp7 (Stellenauswahl) auf einen 238: ; incf sp7 ; definierten Wert bringen (1) 239: 240: movlw b'10001000' ; Enable Global Ints 241: movwf intcon ; Enable PortChange Ints. 242: 243: 244: ;;------------------------------------------------------------------------ 245: ;;Display Init 246: endlos: 247: bcf portb,2 ; LCD: Instruction Code 248: 249: movlw b'00000001' ; Display Clear 250: call dataout 251: 252: movlw b'00000110' ; Entry Mode Set 253: call dataout 254: 255: movlw b'00001100' ; Display On 256: call dataout 257: 258: movlw b'00111000' ; Set Function 259: call dataout 260: 261: bsf portb,2 ; LCD: Data Code 262: 263: movlw b'01000100' ;D 264: call dataout 265: movlw b'01010011' ;S 266: call dataout 267: movlw b'01010000' ;P 268: call dataout 269: movlw b'00101101' ;- 270: call dataout 271: movlw b'01010000' ;P 272: call dataout 273: movlw 72h ;r 274: call dataout 275: movlw 6fh ;o 276: call dataout 277: movlw 6Ah ;j 278: call dataout 279: movlw 65h ;e 280: call dataout 281: movlw 63h ;c 282: call dataout 283: movlw 74h ;t 284: call dataout 285: 286: bcf portb,2 287: movlw b'11000000' ; LCD: 2. Zeile, Pos. 0 288: call dataout 289: bsf portb,2 290: 291: 292: movlw 62h ;b 293: call dataout 294: movlw 79h ;y 295: call dataout 296: movlw 20h ;<space> 297: call dataout 298: movlw b'01001100' ;L 299: call dataout 300: movlw b'01100101' ;e 301: call dataout 302: movlw b'01101111' ;o 303: call dataout 304: movlw 26h ;& 305: call dataout 306: movlw 4eh ;N 307: call dataout 308: movlw 69h ;i 309: call dataout 310: movlw 63h ;c 311: call dataout 312: movlw b'01101111' ;o 313: call dataout 314: 315: ; LCD: Data Code 316: bsf portb,2 317: movlw 20h ;<space> 318: call dataout 319: bsf sp9,7 320: 321: ;;------------------------------------------------------------------------ 322: x: ; Endlosschleife 323: ; Beginn mit kleiner Animation ;-) 324: 325: bcf portb,2 326: movlw b'11001111' ; LCD: 2. Zeile, Pos. 15 327: call dataout 328: bsf portb,2 329: movlw 2eh ;. 330: call dataout 331: 332: call zeit_30_1ms 333: 334: bcf portb,2 335: movlw b'11001111' ; LCD: 2. Zeile, Pos. 15 336: call dataout 337: bsf portb,2 338: movlw 6fh ;o 339: call dataout 340: 341: call zeit_30_1ms 342: 343: bcf portb,2 344: movlw b'11001111' ; LCD: 2. Zeile, Pos. 15 345: call dataout 346: bsf portb,2 347: movlw 4fh ;O 348: call dataout 349: 350: call zeit_30_1ms 351: 352: bcf portb,2 353: movlw b'11001111' ; LCD: 2. Zeile, Pos. 15 354: call dataout 355: bsf portb,2 356: movlw 6fh ;o 357: call dataout 358: 359: call zeit_30_1ms 360: 361: goto x ; Endlos-Schleife, Animation 362: 363: ;;------------------------------------------------------------------------ 364: ;; space=20h [=5Bh ]=5Dh C=43h E=45h H=48h O=4Fh P=50h T=54h 365: menu: ; Menu (von ISR aufgerufen) 366: 367: bcf portb,2 368: movlw b'00000110' ; Entry Mode Set 369: call dataout 370: movlw b'00111000' ; Set Function 371: call dataout 372: movlw b'10000000' ; LCD: 1. Zeile, Pos. 0 373: call dataout 374: bsf portb,2 375: movlw 44h ;D 376: call dataout 377: movlw 53h ;S 378: call dataout 379: movlw 50h ;P 380: call dataout 381: movlw 20h 382: call dataout 383: movlw 20h 384: call dataout 385: movlw 20h 386: call dataout 387: 388: movfw sp7 ; sp7 - welche stelle ? 389: sublw 02h ; sind wir bei der Hunderterstelle ? 390: btfsc status,2 391: goto show_1er 392: movlw 20h 393: call dataout 394: movfw sp7 ; sp7 - welche stelle ? 395: sublw 01h ; sind wir bei der Zehnerstelle ? 396: btfsc status,2 397: goto show_10er 398: movlw 20h 399: call dataout 400: movfw sp7 ; sp7 - welche stelle ? 401: sublw 00h ; sind wir bei der Einerstelle ? 402: btfsc status,2 403: goto show_100er 404: movlw 20h 405: call dataout 406: clrf sp7 ; wieda Fehler 407: ;; incf sp7 ; in definierten Zustand ! 408: goto show_xno 409: show_1er: 410: movlw 5Fh ;_ 411: call dataout 412: movlw 20h 413: call dataout 414: movlw 20h 415: call dataout 416: goto show_xno 417: show_10er: 418: movlw 5Fh ;_ 419: call dataout 420: movlw 20h 421: call dataout 422: goto show_xno 423: show_100er: 424: movlw 5Fh ;_ 425: call dataout 426: goto show_xno 427: show_xno: 428: movlw 20h 429: call dataout 430: movlw 20h 431: call dataout 432: 433: 434: bcf portb,2 435: movlw b'00000110' ; Entry Mode Set 436: call dataout 437: 438: movlw b'00111000' ; Set Function 439: call dataout 440: 441: movlw b'11000000' ; LCD: 2. Zeile, Pos. 0 442: call dataout 443: bsf portb,2 444: 445: 446: movlw 57h ;W 447: call dataout 448: movlw 45h ;E 449: call dataout 450: movlw 52h ;R 451: call dataout 452: movlw 54h ;T 453: call dataout 454: movlw 3Ah ;: 455: call dataout 456: movlw 20h ;<space> 457: call dataout 458: 459: movfw sp12 ; Hunderterstelle laden 460: addlw 30h ; ASCII Code von 0 dazuzaehlen 461: call dataout 462: movfw sp11 ; Zehnerstelle laden 463: addlw 30h ; ASCII Code von 0 dazuzaehlen 464: call dataout 465: movfw sp10 ; Einerstelle laden 466: addlw 30h ; ASCII Code von 0 dazuzaehlen 467: call dataout 468: 469: movlw 20h ;<space> 470: call dataout 471: 472: btfss sp13,2 ; ist Wert ok ? 473: goto show_valuenotok ; is net gsetzt, anzeigen 474: movlw 4Fh ;O 475: call dataout 476: movlw 4Bh ;K 477: call dataout 478: movlw 20h ;<space> 479: call dataout 480: goto showend_vnok 481: show_valuenotok 482: movlw 20h ;<space> 483: call dataout 484: movlw 20h ;<space> 485: call dataout 486: movlw 20h ;<space> 487: call dataout 488: showend_vnok 489: goto end_menu 490: 491: 492: end_menu: 493: movlw 20h ;<space> 494: call dataout 495: 496: ;; bcf sp9,6 ; Wenn nicht aus ISR aufgerufen 497: return 498: 499: ;;------------------------------------------------------------------------ 500: ;; DSP Interrupt ausloesen (low aktiv) 501: ;; 4. Pin auf Port a auf 0 - warten - wieda auf high 502: 503: DSP_Int 504: call zeit_13_1ms 505: bcf porta,4 ; RA4: Interruptleitung fuer DSP 506: call zeit_5_1ms ; mal auf GND ziehn, warten, 507: bsf porta,4 ; und wieder auf High 508: call zeit_5_1ms 509: call zeit_5_1ms 510: return 511: 512: ;;------------------------------------------------------------------------ 513: ;; Zeichen Ausgabe: 514: 515: dataout: 516: movwf sp1 517: bcf status,0 518: movlw b'00001001' 519: movwf sp2 520: 521: dataout1: 522: decfsz sp2,1 523: goto dataout2 524: goto uu 525: return 526: 527: dataout2: 528: rrf sp1,1 ; Daten seriell auf das 529: btfss status,0 ; Schieberegister ausgeben 530: goto null 531: goto eins 532: 533: null: 534: bcf portb,0 ; Serial Input von Schieberegister 535: 536: call clock 537: goto dataout1 538: 539: eins: 540: bsf portb,0 ; Serial Input von Schieberegister 541: 542: call clock 543: goto dataout1 544: 545: clock: 546: bcf portb,1 ; Clock Input von Schieberegister 547: bsf portb,1 ; einen Taktflanke erzeugen, damit 548: bcf portb,1 ; das naechste Bit uebernommen wird 549: return 550: 551: uu: 552: bcf portb,3 ; Und schliesslich 553: call zeit_13_1ms 554: bsf portb,3 ; Enable Signal fuer LCD erzeugen 555: call zeit_13_1ms 556: bcf portb,3 ; und wieder loeschen 557: return 558: 559: ;;------------------------------------------------------------------------ 560: ;; zeit_13_1ms 561: 562: zeit_13_1ms: 563: movlw b'00000011' 564: movwf sp3 565: 566: movlw b'00000001' 567: movwf sp4 568: 569: zeit_13_2ms: 570: decfsz sp3,1 571: goto zeit_13_3ms 572: return 573: 574: zeit_13_3ms: 575: decfsz sp4,1 576: goto zeit_13_3ms 577: goto zeit_13_2ms 578: 579: ;;------------------------------------------------------------------------ 580: ;; Zeit_30ms => 325,125 msec 581: 582: zeit_30ms: 583: call zeit_30_1ms 584: return 585: 586: zeit_30_1ms: 587: movlw b'11111111' 588: movwf sp3 589: 590: zeit_30_2ms: 591: movlw b'11111111' 592: movwf sp4 593: decfsz sp3,1 594: goto zeit_30_3ms ; 255 * 1,275 msec = 325,125 msec 595: return 596: 597: zeit_30_3ms: 598: decfsz sp4,1 599: goto zeit_30_4ms 600: goto zeit_30_2ms 601: 602: zeit_30_4ms: 603: nop ; 4 Mhz Takt => 604: nop 605: nop 606: nop 607: nop 608: goto zeit_30_3ms 609: 610: ;;------------------------------------------------------------------------ 611: ;; Entprellen 612: 613: Entprellen 614: nop 615: call zeit_4x_1ms 616: nop 617: call zeit_4x_1ms 618: nop 619: return 620: 621: zeit_4x_1ms: 622: movlw b'11111111' 623: movwf sp5 624: 625: zeit_4x_2ms: 626: movlw b'00000110' 627: movwf sp6 628: decfsz sp5,1 629: goto zeit_4x_3ms 630: return 631: 632: zeit_4x_3ms: 633: decfsz sp6,1 634: goto zeit_4x_4ms 635: goto zeit_4x_2ms 636: 637: zeit_4x_4ms: 638: nop 639: goto zeit_4x_3ms 640: 641: 642: ;;------------------------------------------------------------------------ 643: ;; zeit_5_1ms 644: 645: zeit_5_1ms: 646: movlw b'00000111' 647: movwf sp3 648: 649: movlw b'00001111' 650: movwf sp4 651: 652: zeit_5_2ms: 653: decfsz sp3,1 654: goto zeit_5_3ms 655: return 656: 657: zeit_5_3ms: 658: decfsz sp4,1 659: goto zeit_5_3ms 660: nop 661: nop 662: nop 663: goto zeit_5_2ms 664: 665: 666: end ; und zu Ende is unser schoenes Prog. 667: 668: ;;------------------------------------------------------------------------ 669: ;; check out the DSP Project Site: 670: ;; http://blub2k.no-ip.com/dsp/ 671: ;; http://sprossenwanne.yi.org/dsp/ or http://sprossenwanne.myip.org/dsp/ 672: ;; mailto: leo@sprossenwanne.at 673: ;;------------------------------------------------------------------------ 674: ;; einige Teile des Programmcodes wurden von der MaturaDoku der Schueler 675: ;; Eggler/Geiger 1998/99 Schellinggasse, Wien1, Oesterreich entnommen. 676: ;;------------------------------------------------------------------------
Datum | Eintrag |
---|---|
14.5.2001 | Blockschaltbild des Gesamtsystems (Stimmenverzerrer - PIC Steuerplatine und DSP); Beschreibung des Blockschaltbilds und des Systems (Schnittstellen, Software Beschreibung von DSP und PIC) |
15.5.2001 | Schaltung der PIC Steuerplatine mit 4 Tasten gezeichnet. PIC Programm entwickelt mit 4 Tasten Eingabe. 3 stellige Anzeige der Frequenz, ändern jeder einzelnen Stelle durch 2 Tasten nach oben und unten, 1 Taste für die nächste Stelle, 1 Taste zum Bestätigen. Ausgabe auf dem Display. Layout der PIC Steuerplatine mit 4 Tasten begonnen. |
16.5.2001 | Dokumentation zur PIC Steuerplatine mit 4 Tasten. Layout der PIC Steuerplatine. |
Dies ist die Dokumentation für die Fachklausurprüfung 14.5.2001 bis einschliesslich 18.5.2001.
Es wurde am 1. Tag eine Aufgabe gestellt:
Diese Dokumentation basiert auf Scripts von view->source[Nico Edtinger] um sie sowohl online verfügbar als auch druckbar zu machen. In nächster Zeit wird der Code unter der GPL auf http://viewsource.web.ag/ zur Verfügung stehen.
Das Copyright für den gesamten Inhalt liegt bei Leo Eibler und Nico Edtinger. Wir sind per Mail zu ereichen falls jemand größere Auszüge aus dieser Dokumentation verwenden will.