Home

PICDEM.net™ Embedded Internet/Ethernet Demonstration Board

image

Contents

1. interupt c eK kA 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 22 2 2 2 2 07 OK KK KK KA HH HH HH HH kkk kk kokckck ck I k k k i Headerdateien eR AA Ck 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 I 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2207 finclude interrupt h include defines h include usart h L kt Globale Variable eK I eA A A A 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 07 Zeitkonstante zur Berechnung der Drehgeschwindigkeit in U min T 0 0000002 s Tosc 16 TMROPrsc 65536 16 Bit Timer 512 ticks U TMROPeriod T s 60 s min 1024 ticks U 109 PDV Vertiefung 11 07 2003 const double TMROPeriod 1 7895697066666672 ticks min U Diese Zaehler werden fuer die Maskierungsmacros gebraucht volatile unsigned usart int count 0 volatile unsigned dec int count 0 volatile unsigned tmr int count 0 Lochscheibenzaehler volatile unsigned tick counter 0 volatile long speed 0 volatile unsigned char direction LEET
2. decoder h HK KK kk k ck kk Ck ck kc kck ck kck ck kk ck ck k ck ck ck kck ck kc kc k ck kc k ck k 2 2 2 2 kc kck kc k ck k ck ck ck k 2 2 2 2 2 2 2 2 2 2 2 22 2207 ifndef DECODER H define DECODER H KK KK KKK KK KR KK Ck kk kk Ck Ck KK Ck Kk kk Ck Kk Ck Ck kk ck k kk kck ck ck ck k ck ckck ck ck ck k ck ck k kc k kk Funktionsdeklarationen OKkCkCkck kCkck ck kk Ck kk 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 kc k ck kc 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2207 void Decoderlnit void endif 6 8 7 decoder c tt Prozessdatenverabeitung Vertiefung Ansteurung eines Motors ber UDP mit Hilfe des PICDEM net Demoboards und dem USART Markus K hle Marco Kosinski 534931 tt tt it X x decoder c eA ek A AA A AA AA A AA AA A I A I A I He OK KK KK KA I HH A HH kckckck ck ck kokck ck ck I k k k Headerdateien KCKCKCkCkCkCkck Ck 2 A 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 22
3. Markus K hle Marco Kosinski 534931 o ZZ 006 F X motor server h eR eA A 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2207 ifndef MOTOR SERVER H define MOTOR SERVER H OK KK KK KK KKK kk HH HH k k k Ck kk k k k ck ck ckck ck ck kckckckck ck kokck ck ck I k k k i Headerdateien eR eA A Ck 2 2 2 2 I 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2207 finclude lt pl8cxxx h gt finclude compiler h include stacktsk h OK RK KR HH HH HH HH HH kokckck ck ck k k k k Definitionen eK eA A 2 2 2 2 2 A A 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 22 2 2 2 2 07 define CHAR MAX 16 Defines fuer Simulation der seriellen Schnittstelle define DPORT OxF8 Datenport an RS232 SCH define LCR OxFB LineControlRegister define MCR OxFC ModemControlRegister define MSR OxFE ModemStatusRegister Masken fuer MSR define DCTS 0x01 Aenderung an CTS define DDSR 0x02 Aenderung an DSR define CTS 0x10 Linker Sensor define DSR 0x20 Rechter Sensor Masken fuer MCR define DTR 0x01 R
4. interrupt c HR eA A 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2207 tt Headerdateien eR EEE 2 2 2 22 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2207 finclude interrupt h include compiler h include motor_server h BOR KK KK KR I KKK Kk kkk kkk kk kkk kkk k kk I kk k k kk k kkk AA kk k k k I I k k Globale Variable eK eA A 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 22 2 2 2 2 2 2 2 2 2 22 2 2 2 2 07 Zeitkonstante zur Berechnung der Drehgeschwindigkeit in U min T 0 0000002 s Tosc 16 TMROPrsc 65536 16 Bit Timer 1024 ticks U 512 pro Pin an PORTB TMROPeriod T s 60 s min 1024 ticks U const double TMROPeriod 3 5791394133333344 ticks min U volatile unsigned tick counter 0 volatile unsigned cts counter 0 volatile unsigned dsr counter 0 volatile long speed ist 0 volatile unsigned char direction LEFT SPIN 85 PDV Vertiefung 11 07 2003 tt Implemetierung der HighPrio Interrupt Vektors eR ek A AA 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
5. interrupt c eR EEE 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 07 ifndef USART H define USART H BOR RK KK KAA A kkk K kkk KK kK kk kk kk A ck ck ckckckckckckckck ck ck kokck ck ck I k k k Definitionen eK A A Ck 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 22 2 2 2 2 07 define READ 0 define WRITE define BUFF SIZE 64 define SPACE 0x20 define ESC Ox1B define CR 0x0D define BS 0x08 define LEFT n define RIGHT E define DISABLE d define BREAK bh define INT if OK KK KK RA I KKK kk kkk kK kkk KK kK A kk k k kk kk k k AA kokck ck ck k k KK Funktionsdeklarationen eA EEE A 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2207 unsigned char read write buffer char unsigned char void USARTInit void endif USART H 6 8 2 usart c BOK RK KK I HH HH HH HH k k kk k kkk k ck ck I k k k Prozessdatenverabeitung Vertiefung Ansteurung eines Motors ber UDP mit Hilfe des PICDEM net Demoboards und dem USART Ck Ck Ck Ck CK CCS CC CC CK SIC CC CC KK KK KH KH KH KR AK AK AK AK A AK AK A FH AK KA AK A A A AK AI AI A FH AK A A A A A AI ko ko k
6. Markus K hle Marco Kosinski 534931 kk Ck Ck CK CK CCS CC Ck CK CK CK CIC CC CC CC KK KH TH KH KR AK AK AK A A AK AK AH AH AH KH A AK AK A A S A AK A A AK AK A A AK ko ko ko ko ko Aenderungen am Original Quellcode des TCP IP Stacks websrvr h Es wurden diverse Praeprozessorschalter hizugefuegt Um einige Fuktionen die nicht benoetigt wurden auszuklammern Diese werden mit gt new gekennzeichnet Desweiteren wurden die Funktionen MotorInit MotorServer MotorShutdown hizugefuegt FF ob 0X F A X F X X o ox x eK Ck CkCkCkCk kk 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 k ck kokckckckckckckck ck ck kokokck ck ck I kk kk Following define uniquely deines this file as main entry application In whole project there should only be one such definition and application file must define AppConfig variable as described below S define THIS_IS_STACK_APPLICATION define BAUD RATE 19200 bps define USART USE BRGH LOW if defined USART USE BRGH LOW define SPBRG VAL CLOCK FREQ BAUD RATE 64 1 felse define SPBRG VAL CLOCK FREQ BAUD RATE 16 zi 1 fendif if SPBRG VAL gt 255 terror Calculated SPBRG value is out of range for currnet CLOCK FREQ tendif include lt string h gt These headers must be included for required defs Se in
7. if approx TRUE amp amp speed ist lt speed soll SetDutyCycle GetDutyCycle 1 else if approx TRUE amp amp speed ist gt speed soll SetDutyCycle GetDutyCycle 1 else approx FALSE Sollwert erreicht oder approx FALSE Puffer loeschen und zur Anzeige der Geschwindigkeit auf dem LCD nutzen memset void buffer 0 CHAR MAX ltoa speed ist char buffer strcatpgm2ram char buffer ROM char U min ys XLCDGoto 0 0 XLCDPutString char buffer BYTE ProcessXDATA XDATA data if data gt rdwr amp OxFF RDONLY if data gt port amp OxFF MSR DISABLE INTERRUPTS data gt value dsr lt lt 5 cts lt lt 4 ddsr lt lt 1 dcts dcts 0 ddsr 0 ENABLE INTERRUPTS else if data gt port amp OxFF DPORT WORD dc dc CCPRIL lt lt 2 CCPICON amp 0x30 gt gt 4 if dc 205 0 20 data gt value OxFF else if dc gt 205 amp amp dc lt 307 20 30 data gt value Ox7F else if dc gt 307 amp amp dc 410 30 40 data gt value Ox3F else if dc gt 410 amp amp dc lt 512 40 50 data gt value OxIF else if dc gt 512 amp amp dc lt 614 50 60 data gt value Ox0F else if dc gt 614 amp amp dc lt 717 60 70 data gt value 0x07 else if d
8. BOR KK KK kk Ck KKK A kkk KKK Ck KK kk kk k Kk Sk k k k kk Ck AA ckckckckckckckckck ck kokck ck ck I k k k Externe Globale Variable HA eA A A A 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2207 extern volatile unsigned usart int count extern volatile unsigned dec int count extern volatile unsigned tmr int count extern volatile unsigned char direction extern volatile long speed BOK RK KK kk KKK KKK kK KKK kK Ck kk kk kk kk kkk Ck kk Ck k Kk kkk kc kckckckckck ck kckckck ck ck kokckck ck I k k k Funktionsdeklarationen eR A A 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 07 void USARTrxISR void void DecoderISR void void TimerOISR void endif INTERRUPT H 6 8 9 interrupt c BOK KK KK kk KKK KKK KKK Ck kk kk kk HH kokckck ck I Hk k k Prozessdatenverabeitung Vertiefung Ansteurung eines Motors ber UDP mit Hilfe des PICDEM net Demoboards und dem USART Markus K hle 137544 Marco Kosinski 534931 ob X XX ox x
9. interrupt c KCKCKCkCkCkCkCk Ck 2 eA 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 07 ifndef INTERRUPT H define INTERRUPT_H_ BOR RK KK IK A I KKK Kk kkk Kk kkk kkk kk kk kkk kkk k k k kk k kk AA I k k k I k k k x Headerdateien bake include lt pl8cxxx h gt VERF HH HH HH HH k k k kk kkk k k ck I KK Definitionen eK EEE EEE 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 kk ko kckckckckckokck ck ck kckokck ck ck kokckck kc k kk define LEFT SPIN 0 define RIGHT SPIN 1 BOK RK KK I HH HH HH HH k k kk kk k AA KK k k ok p Maskierungsmakros bake define MASK USART RX INT INTCONbits GIEH 0 if usart_int_count O PIEIbits RCIE 0 INTCONbits GIEH define UMASK USART RX INT INTCONbits GIEH 0 if usart int count 0 PIElbits RCIE 1 INTCONbits GIEH define MASK DECODER INT INTCONbits GIEH O if dec_ int count O INTCONbits INTOIE 0 INTCONbits GIEH define UMASK DECODER INT INTCONbits GIEH O if dec int count O INTCONbits INTOIE 1 INTCONbits GIEH define MASK TIMERO INT INTCONbits GIEH 0 if tmr int count 0 INTCONbits TMROIE 0 INTCONbits GIEH define UMASK TIMERO INT INTCONbits GIEH 0 if tmr int count O INTCONbits TMROIE 1 INTCONbits GIEH
10. Update tick here too just in case interrupt is not used 2 TickUpdate currentTick TickGet if TickGetDiff currentTick lastTick gt TICK SECOND 2 lastTick TickGet USARTPut XMODEM NAK 98 PDV Vertiefung 11 07 2003 Blink LED to indicate that we are waiting for host to send the file x f LATA2 2 1 while USARTIsGetReady while lbDone Update tick here too just in case interrupt is not used ay TickUpdate if USARTIsGetReady Toggle LED as we receive the data from host PA LATA2 1 c USARTGet Real application should put some timeout to make sure that we do not wait forever continue switch state default B ever gt XMODEM SOH state SM MPFS BLOCK else if c XMODEM EOT Turn off LED when we are don SZ LATA2 1 MPFSClose USARTPut XMODEM ACK lbDone TRUE else USARTPut XMODEM NAK break case SM MPFS BLOCK We do not use block information WI lResult XMODEM ACK blockLen 0 state SM MPFS BLOCK CMP break case SM MPFS BLOCK CMP We do not use 1 s comp block value zy state SM MPFS DATA break case SM MPFS DATA Buffer block data until it is over x tempData blockLen c if blockLen XMODEM BLOCK LEN We have one block data Write it to
11. Int d for i 0 i lt 200 i Nop Nop void XLCDDelayi5ms void int 1 for i 0 i lt 150 i XLCDDelayl00Ous tt Function void XLCDPut char data PreCondition XLCDInit is already called AND i XLCDIsBusy FALSE AND defined XLCD IS BLOCKING Input data Data to be written Output None Side Effects None Overview None Note Data is written to character generator RAM or display data RAM depending on how the access is i setup eR EEE 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 207 void XLCDPut char data if CursorAddr 0x10 LCD hat 16 Stellen pro Reihe XLCDGoto 1 0 if CursorAddr 0x20 XLCDGoto 0 0 CursorAddr 0x00 CursorAddr TRIS_RW 0 All control signals made outputs TRIS RS 0 TRIS DATA PORT amp Oxf0 DATA PORT amp Oxf0 DATA PORT data gt gt 4 amp 0x0f RS PIN 1 Set control bits RW PIN 0 XLCDDelay500ns E PIN 1 Clock nibble into LCD XLCDDelay500ns E PIN 0 DATA PORT amp Oxf0 DATA PORT data amp 0xO0f XLCDDelay500ns E PIN 1 Clock nibble into LCD XLCDDelay500ns E PIN 0 TRIS DATA PORT 0x0f return OK KK KK K kK Ck kk AA I KKK kkk KK k Ck kk kkk kK kk kkk A kk
12. Kommen wir nun Zu den eigentlichen Einstellungen bei der MPLAB IDE e Configuration Bits Enable Background Debug e Debugger w hlen 56 PDV Vertiefung 11 07 2003 Am Anfang dieses Tutorials haben wir einige Configuration Bits Disabled unter anderem den Background Debug Dieses Configuration Bit muss nun wieder Enabled werden um das Debuggen zu erm glichen Diese Information ist f r den Compiler deswegen notwendig da er eigene W rter und Spr nge eincompilieren muss Zudem muss jetzt nicht nur der Programmer sondern auch der Debugger im Men selektiert werden Men Debugger gt Select Tool gt MPLAB ICD 2 Da nun der Debugger ausgew hlt und das Output Window einen korrekten Verbindungstest anzeigt kann nun das Debuggen ausprobiert werden Zuerst wird das Watch Window ge ffnet in dem die Register ADRESL und ADRESH sowie die beiden Ergebnis Strings ANOString und AN1String angezeigt werden sollen Men View gt Watch Vach ni xj Add SFR AD CONO Add Symbol parameter 1 Address Symbol Name Maine ADRESL UO ADRESH OO H ANOString rr H AMiString rr watch 1 Watch 2 Watch 3 Watch 4 Um in der Watch Register oder Variablen beobachten zu k nnen m ssen diese erst eingef gt werden Da es sich bei den Registern ADRESL und ADRESH um Special Function Register handelt findet man diese in der linken Listbox direkt neben dem Button Add SFR Dort sucht man diese selektiert
13. PDV Vertiefun 11 07 2003 en AEN GHD Gm Koookbeoooa E O DH Cmm d a n u a a a a O u a 0 a a u D O a VW n u SH BBEBBB FEFE DEER CLLILT TI LIGUE D DAR a ll da GIS ODD PSU eda ek ed lie DIC DEM net DEMO BOARD rem Bild 2 Best ckung PICDEM net Board Erl uterung MICROCONTROLER SOCKEL 40 Pins Dieses Board unterst tzt die g ngigen Microchip PICMicro Microcontroller Fabrikneu enth lt dieses Board den PIC 18F452 Microcontroller welcher mit einer Clockfrequenz von 19 6608 MHz l uft Zus tzlich ist der Microcontroller mit der Demo Applikation welches den TCP IP Stack von Microchip verwendet vorprogrammiert SPEICHER CHIP Ein EEPROM welches 256 KBit speichern kann 32 KB Hier k nnen f r den embedded Webserver die html Seiten abgespeichert werden LCD DISPLAY Ein 2 Zeilen LCD Display zur visuellen Ausgabe von Status oder Fehlermeldungen ETHERNET CONTROLER Es wird der Realtek RTL8019AS single Chip genutzt STATUS LEDs Es werden 4 LEDs unterst tzt e SYSTEM Leuchtet wenn das Board die Stromversorgung erh lt und richtig verbunden ist e LINK STATUS LED leuchtet wenn eine Verbindung besteht XMIT und RX LEDs blinken invertierte Logik wenn das Board Pakete versendet oder empf ngt BENUTZERDEFINIERTE LEDs Diese beiden LEDs werden von einen digitalen Output des Controller gesteuert Sie k nnen benutzt werden um einen digitalen Output zu simulieren Be
14. 3 5 Generelle Erkenntnis Fazit Dieses Kapitel beschreibt eine wichtige Phase des Projekts was sehr viele Erkenntnisse ber das Programmieren des PIC18F452 der Programmiersprache selbst und der Best ckung des PICDEM net Demo Board preisgibt Alle Informationen die hier zusammen getragen wurden kann man durch eigene Recherche in den mitgelieferten pdf Dokumentationen und des MCHPStacks herausfinden was allerdings auch sehr m hsam ist Eines der Hauptanliegen weshalb es zu dieser Ausf hrlichen Untersuchung auch erst gekommen ist war das LCD Display Da dieses auf alle F lle genutzt werden sollte und es keine spezielle Dokumentation bez glich dieses Displays gibt ist es zwangsweise zur der eben Beschriebenen Entwicklung gekommen Das nun eigentliche und vielleicht auch interessantere Ansprechen und die Ergebnisse dieser Untersuchung werden im n chsten Kapitel dem Ansprechen der Peripherie und Hardware beschrieben dA PDV Vertiefung 11 07 2003 4 Ansprechen der Peripherie und Hardware in C Im Kapitel 2 wurde beschrieben welche Hardware auf dem PICDEM net Demo Board uns zur Verf gung steht Da nun auch die grundlegenden Informationen ber den Microcontroller die Programmiersprache mit Compiler C18 und der Peripherie des PICDEM net Board zur Verf gung stehen soll Erl utert werden wie die einzelne Peripherie angesteuert werden kann Zudem sollte noch einmal erw hnt werden dass Teile aus dem Source Code des MCHPStacks
15. Da wir festgestellt haben dass die schon installierte Firmware fehlerhaft war musst erst eine aktuellere Version auf das EEPROM geschrieben werden Daher wird das Programmieren des EEPROMs vor dem Konfigurieren der Firmware behandelt Zun chst aber erst eine Auflistung und Erl uterung aller verwendeten Ger te und der ooftware 2 1 Hardware 2 1 1 PICDEM net Board ky e een i j pe L d Ke r I 5 EE EE E 2 R20 O08 IR WM S E LI A LL fo FL1012 0210 C Act ES _ C m mem eme pp e mm 00000 000600000000000000 NO 0000000000000000000000 208530000 000000000000000 002000000000000000000000 Bi 0000000000000 o 000000000 213F TAIWAN Lg F Le 2220000000000000000000 o o gnun i 2200000000 000000000 RA R Sr 0000000000 000000000 In 2280000000 0 000000000R LN N MI O90000000 CO OOOOOOO y s L A my n1 RO 200000000C OOOO 38 D6 a B D f P EN 00000 XE p Im el d x H H d 2 E WC 20000000 00000000 D O0OO0O000000 BB880000000CGe o0coooooooo RB5 USER LEDs i li Be ge XMT n m 0000000000000 RCAF I stotus status status O00000 OK OOO00000000 0 O90 00 00 00 00 0 00 000 ORONO ZU Es KH Ko KH Ko Ko He Ho Lo se VESESZSEU Ee ZI KR ZH ZU ES EEE CE MIEROEHIE PICDEM net ETHERNET ID DEMO BOARD 2001 2303 Bild 1 PICDEM net Demo Board dl Ch Co g LJ Vw Ww
16. Low BRG speed RCSTA 0510010000 SPBRG SPBRG VAL TOCON 0 INTCON_GIEH 1 gt new INTCON GIEL 1 gt new BORK KK KK kk KKK KKK kk kk kK kkk kkk kkk kkk kk KC Ck Ck Ck kCkCkckckckckckck ck ck kckckck ck ck kokckck ck I k k k Function void InitAppConfig void PreCondition MPFSINit is already called Input None Ontput s Write Read non volatile config variables Side Effects None Overview None Note None FA A Ck kckck ck ck k kc kc kckckck kc kc k ck kckckck ck Ck kckck ck ck k kckck ck ck ck k kc kc kck kckckck ck ck kckckck ck ck kokokck ck ck kokck kk f static void InitAppConfig void if defined MPFS USE EEPROM BYTE c BYTE p endif Load default configuration into RAM AL AppConfig MyIPAddr v 0 MY DEFAULT IP ADDR BYTE AppConfig MyIPAddr v 1 MY DEFAULT IP ADDR BYTE2 AppConfig MyIPAddr v 2 MY DEFAULT IP ADDR BYTE3 AppConfig MyIPAddr v 3 MY DEFAULT IP ADDR BYTE4 AppConfig MyMask v 0 MY DEFAULT MASK BYTEI AppConfig MyMask v 1 MY DEFAULT MASK BYTE2 AppConfig MyMask v 2 MY DEFAULT MASK BYTE3 AppConfig MyMask v 3 MY DEFAULT MASK BYTE4 AppConfig MyGateway v 0 MY DEFAULT GATE BYTE1 AppConfig MyGateway v l MY DEFAULT GATE BYTE2 AppConfig MyGateway v 2 MY DEFAULT GATE BYTE3 AppConfig MyGateway v 3 MY DEFAULT
17. These libraries routines are written to support the Hitachi HD44780 LCD controller i The user must define the following items u The LCD interface type 4 or 8 bits If 4 bit mode 2 whether using the upper or lower nibble The data port The tris register for data port The control signal ports and pins The control signal port tris and pins The user must provide three delay routines DelayFor18TCY provides a 18 Tcy delay DelayPORXLCD provides at least 15ms delay DelayXLCD provides at least 5ms delay define DATA PORT PORTD define TRIS DATA PORT TRISD Set your LCD type Eu define XCLD TYPE FOUR BIT amp LINES 5X8 This is how LCD will be setup on Init EJ define XLCD DISPLAY SETUP CURSOR OFF amp BLINK OFF Uncomment following line if LCD data is to be read back xy define XLCD ENABLE LCD READS CTRL PORT defines the port where the control lines are connected These are just samples change to match your application RE define RW PIN LATDbits LATD5 PORT for RW define TRIS RW TRISDbits TRISD5 TRIS for RW define RS_PIN LATDbits LATD4 PORT for RS define TRIS RS TRISDbits TRISD4 TRIS for RS define E PIN LATAbits LATA5 PORT for E
18. XLCDCursorLeft data SPACE Leerzeichen auf LCD ausgeben XLCDPut data XLCDCursorLeft char pointer Pufferposition um eine Stell zuruecksetzen Ausgabe der Drehgeschwindigkeit ltoa spesd xlcd buffer lower StrcatpgmZram xlcd buffer lower ROM char U min WT XLCDGoto 1 0 XLCDPutString xlcd buffer lower return 0 112
19. const ROM char COMMANDS OK PAGE COMMANDS OK PAGE LEN break case CGI CMD LCDOUT fe Note implemented T break default memcpypgm2ram unsigned char argv 0 const ROM char CMD UNKNOWN PAGE CMD UNKNOWN PAGE LEN break endif OK KK KK RI Kk I KKK I KK kK k k kkk kK k k k K k kk k k k k kA AA kokck ck ck I k k k Function WORD HTTPGetVar BYTE var WORD ref BYTE val PreCondition None Input var Variable Identifier ref Current callback reference with respect to var variable val Buffer for value storage Output Variable reference as required by application Side Effects None Overview This is a callback function from HTTPServer to main application Whenever a variable substitution is required on any html pages HTTPServer calls this function 8 bit variable identifier variable reference which indicates whether this is a first call or not Application should return one character at a time as a variable value Note Since this function only allows one character to be returned at a time as part of variable value HTTPServer calls this function multiple times until main application indicates that there is no more value left for this variable On begining HTTPGetVar is called with ret HTTP START OF VAR to indicate that this is a first call Application should use this reference to start the variable
20. 2 9 1 C18 Compiler Der MPLAB C18 Compiler ist ein freier optimierter ANSI C Compiler f r die PIC18 PlCmicro Microcontroller MCU Der Compiler ist eine 32 Bit Windows Konsolen Applikation und voll Kompatibel mit der MPLAB IDE von Microchip Er ermoglicht zudem auf Quellcodeebene das Debugging mit dem MPLAB ICD2 In Circuit Debugger Eine genauere Beschreibung und eine Tiefergehende Einf hrung in den C18 Compiler und den Bibliotheken finden Sie in Kapitel 3 Aktuelle Compiler Versionen sowie Datenbl tter und User Guides kann man von der Homepage von Microchip runterladen http www microchip com 1010 pline tools picmicro code mplab 1 8 2 3 2 Konfiguration der MPLAB IDE f r C18 Der Compiler ist voll Kompatibel zur MPLAB IDE allerdings m ssen vor der Nutzung noch einige Einstellungen get tigt werden wenn man in C programmieren m chte 2 4 Programmieren der Demo Firmware auf EEPROM mit MPLAB v6 20 Zu dem Demo Board wird der In Circuit Debugger MPLAB ICD 2 vom Microchip verwendet Das erm glicht uns das direkte beschreiben des EEPROMs ohne ihn vom Board abnehmen zu m ssen PDV Vertiefung 11 07 2003 2 4 1 MPLAB DIE v6 20 Installation und Konfiguration Es wird als Entwicklungsumgebung die Software MPLAB IDE v6 20 von Microchip verwendet die man direkt von der Homepage herunterladen kann Diese Software erm glicht die Entwicklung von Projekten in verschiedenen Sprachen z B Assembler oder C Zudem kann man das Projekt
21. define TRIS E TRISAbits TRISA5 TRIS for E Display ON OFF Control defines define DON 0000001111 Display on Ex define DOFF 0000001011 Display off 27 define CURSOR_ON 0600001111 Cursor on define CURSOR OFF 0000001101 Cursor off Wi define BLINK_ON 0600001111 Cursor Blink Wi define BLINK_OFF 0600001110 Cursor No Blink Cursor or Display Shift defines define SHIFT CUR LEFT 0b00010011 Cursor shifts to the left ER define SHIFT CUR RIGHT 0b00010111 Z Cursor shifts to the right define SHIFT DISP LEFT 0b00011011 Display shifts to the left define SHIFT DISP RIGHT 0500011111 Display shifts to the right define DISP CLEAR 0500000001 Function Set defines define FOUR BIT 0b00101111 4 bit Interface S define EIGHT BIT 0b00111111 8 bit Interface ay define LINE 5X7 0500110011 5x7 characters single line define LINE 5X10 0b00110111 5x10 characters SSC define LINES 5X7 0b00111111 5x7 characters multiple line define LINES 5X8 0b00111000 5x8 characters multiple line define ROM rom extern unsigned CursorAddr void XLCDInit void void XLCDPut char data void XLCDPutString char string void XLCDPutROMString ROM char string char XLC
22. gt Project Build options zx General MPASM Assembler MPLINK Linker MPLAB C18 Output Directory BIMBIR Browse Intermediates Director TMFDIR Browse Assembler Include Path IAINDIR Browse Include Path HINCDIR C ProgrammeAmect shs Br Library Path LIBDIR ESProgammemcelENN 0000000000000 Browse Linker Script Path ILERDIA C gsmmeaec h Bram Help Suite Default Abbrechen bernehmen Zus tzlich ist eine Pfadangabe f r den Output m glich Wenn dieser nicht gesetzt wird ist der Output default m ig der Projekt Ordner Jetzt fehlt nur noch eine Einstellung und dann sind auch schon alle Grunds tzlichen Projekteinstellungen get tigt Es muss per Hand das gew nschte Linker Script angegeben werden In dem bersichtsfenstern ADLCD mcw werden alle genutzten Files aufgelistet In diesem Fenster klickt man mit der rechten Maustaste auf Linker Scripts gt Add Files 50 PDV Vertiefung 11 07 2003 ho el xi E AD_LCD mcp Source Files Header Files Object Files xs Librarv Files Blinker Scripts 18f452 kr Es gibt f r den PIC18F452 zwei verschiedene Linker Scripte Der eine ist der hier in der Grafik abgebildete und der andere hat am Ende von seinem Namen ein i 18f452i lkr Laut einem Tutorial soll dieser speziell f r Debug Zwecke gut sein Ein gro er Nachteil der MPLAB IDE ist dass sie sich nicht g
23. 75 PDV Vertiefung 11 07 2003 while UDPGet amp buffer in pointer if in pointer CHAR MAX UDPDiscard break Die drei MSBs der ersten 16 Bit werden benoetigt um herauszufinden um welche Struktur es sich handelt 000 gt XDATA 100 gt EDATA wird generell nur als Reply gesendet 110 gt CDATA 11 gt SDATA Danach die Daten an die jeweilige Funktion weitergeben T dataid Val WORD buffer if dataid v 0 amp OxEO OxEO error ProcessSDATA SDATA buffer else if dataid v 0 amp 0xEO 0xC0 error ProcessCDATA CDATA buffer else if dataid v 0 amp 0xEO 0x00 error ProcessXDATA XDATA buffer else error EINVALSTCT Teste ob Socket breit ist zum Senden while UDPIsPutReady ListenSoc FALSE Falls Fehler aufgetreten gt EDATA schreiben if error errorframe EDATA buffer errorframe gt dummy 0x8000 errorframe gt dummy swaps errorframe dummy strcpypgm2ram char errorframe gt message errormsg error in pointer sizeof EDATA Daten in Transmitpuffer schreiben while UDPPut buffer out _pointer if out pointer in pointer break und abschicken UDPFlush Neuen Socket oeffnen UDPClose ListenSoc ListenSoc UDPOpen ListenPort NULL 0 Falls Annaeherung an Sollwert erwuenscht definiert Anpassung der Motorleistung vornehmen
24. O Bilder Enthalt alle in der Dokumentation verwendeten Bilder C18 Compiler Installationsdateien des C18 Compiler MCHPStack Die Mitgelieferte Firmeware als Source Code zum entpacken und weiterarbeiten MPLAB IDE Die Installationsdatei der Entwicklungsumgebung von MPLAB Version 6 20 und die eben von Microchip online gestellte Version 6 30 wir im Laufe unseres Projekts gefunden und verwendet haben Pr sentation Unsere Powerpoint Pr sentation so wie wir sie Pr sentiert haben sowie die verwendeten Bilder in der Pr sentation Projekte Alle Unterprojekte die wir im Laufe der Vertiefung erarbeitet haben Eins davon wird im Kapitel Tutorial verwendet die anderen k nnen zum Selbststudium genutzt werden da alles ausf hrlich sp PDV Vertiefun 11 07 2003 kommentiert ist Die beiden Hauprojekte sind auch in diesem Order in den jeweils gekennzeichneten Unterordnern UDP Client Der genutzte UDP Client mit Source Code und evtl gebraucht dlls f r ein System auf dem keine Visual Studio installiert ist Dazu einfach die dlls in das Verzeichnis kopieren in dem die ausf hrbare Datei liegt 6 7 Source Code motor udp 6 7 1 motor server h Jf KCKCKCKCKCk kCkCkCkCkCk kk HH HH HH HH kokck ck ck ck k k k Prozessdatenverabeitung Vertiefung Ansteurung eines Motors ber UDP mit Hilfe des PICDEM net Demoboards und dem Microchip TCP IP Stack
25. Oxf0 DATA PORT cmd amp 0x0f XLCDDelay500ns E PIN 1 Clock command in XLCDDelayb500ns E PIN 0 104 PDV Vertiefung 11 07 2003 TRIS DATA PORT 0x0f return OR KKK KK kkk KK kk HH Ck kk kK kk KC kk HH HH kckckckck ck kokckck ck k k KK Function char XLCDIsBusy void PreCondition None Input None Output non zero if LCD controller is ready to accept new a data or command zero otherwise Side Effects None Overview None Note None eK Ke AA 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 k ck kokckckckckckokck ck ck kokokckck ck ckokck ck ck kk char XLCDIsBusy void RW PIN 1 Set the control bits for read RS PIN 0 TRIS_RW 0 All control signals made outputs TRIS RS 0 XLCDDelay500ns E PIN 1 Clock in the command XLCDDelay500ns if DATA_PORT amp 0x08 E PIN 0 Reset clock line XLCDDelayb500ns E PIN 1 Clock out other nibble XLCDDelayb500ns E PIN 0 RW PIN 0 Reset control line return 1 Return TRUE else Busy bit is low E PIN 0 Reset clock line XLCDDelayb500ns E PIN 1 Clock out other nibble XLCDDelay500ns E PIN 0 RW PIN 0 Reset control line return 0 Return FALSE OK KK KK KKK Kk KKK KKK kkk KK kK k kk Sk AA Ck kc AAA ck ckck ck ck kckckckck ck kokckck ck
26. Wait for acquisition time Here rather than waiting for exact time a simple wait is used Real applications requiring high accuracy should calculate exact acquisition time and wait accordingly oy ADCResult v 0 100 while ADCResult v 0 First convert ANO channel ANO is already setup as an analog input Sy ADCONO GO 1 Wait until conversion is done St while ADCONO GO y3 Save the result T ADCResul ADCResul v 0 ADRESL v 1 ADRESH ct ct Convert 10 bit value into ASCII String Dr itoa ADCResult Val ANOString Now convert AN1 channel In PICDEM net board RA2 thru RA7 should be digital or else LED LCD and NIC would not operate correctly Since there is no mode where only ANO and AN1 be analog inputs while rests are digial pins we will temperoraily switch select a mode where RA2 becomes analog input while we do conversion of RAl Once conversion is done we will convert RA2 back to digital pin ox o X X ox ox x ud ADCON1 0b10000100 Select AN1 channel ud ADCONO 0510001001 Wait for acquisition time Here rather than waiting for exact time a simple wait is used Real applications requiring high accuracy should calculate exact acquisition time and wait accordingly ori ADCResult v 0 100 while ADCResult v 0 Start the conversion
27. dif MAX UDP SOCKETS lt 0 MAX UDP SOCKETS gt 255 terror Invlaid MAX UDP SOCKETS value specified endif if defined STACK USE SLIP define MAC TX BUFFER SIZE define MAC TX BUFFER COUNT felse For SLIP there can only be one transmit and one receive buffer 1024 L Both buffer must fit in one bank If bigger buffer is required you must manually locate tx and rx buffer in different bank or modify your linker script file to support arrays bigger than 256 bytes ay define MAC TX BUFFER SIZE 250 define MAC TX BUFFER COUNT 1 endif Rests are Receive Buffers define MAC RX BUFFER SIZE MAC TX BUFFER SIZE fif MAC TX BUFFER SIZE lt 0 MAC TX BUFFER SIZE gt 1500 terror Invalid MAC TX BUFFER SIZE value specified endif if MAC TX BUFFER SIZE MAC TX BUFFER COUNT gt 4 1024 error Not enough room for Receive buffer endif Maximum numbers of simultaneous HTTP connections allowed Bach connection consumes 10 bytes pri define MAX HTTP CONNECTIONS 3 dif MAX HTTP CONNECTIONS lt 0 MAX HTTP CONNECTIONS gt 255 terror Invalid MAX HTTP CONNECTIONS value specified endif define AVAILABLE SOCKETS MAX SOCKETS if defined STACK USE HTTP SERVER define AVAILABLE SOCKETS2 AVAILABLE SOCKETS MAX HTTP CONNECTIONS felse define AVAILABLE SOCKETS2 MAX SOCKETS fendif if defined STACK
28. e RCT RX DT RCAI T1OSI CCP2 a a 16 25 RCG TX CK RC2 CCP1 5r 17 24 O 5 RCS5 SDO RC3 SCK SCL e 23 lt w RC4 SDI SDA RDO PSPO e 19 39 e RD3 PSP3 RDM PSP1 9 21 RDZ PSP2 Bild 11 PIC18F452 Pin Belegung 3 3 6 Ger t Eigenschaften berblick 2 Capture Compare PWM Module EE Serielle Kommunikation MSSP Adressierbarer USART Parallele Kommunikation 10 Bit Analog Digital Wandler 8 Eingangs Kan le RESET und Verz gerungen POR BOR RESET Instruktion Stack Full otack Underflow PWRT OST Programmierbarer LOW Voltage Detect Programmierbarer Brown Out Reset Instruction Set 75 Instruktionen 40 Pin Dip 3 4 Externe verf gbare Peripherie Der Vollst ndigkeit wegen wird an dieser Stelle auch alle externe verf gbare und ansteuerbare Peripherie aufgez hlt wobei die exakte Beschreibung der Ansteuerung und Handhabung der Peripherie im Kapitel 3 zu finden ist 93 PDV Vertiefung 11 07 2003 Zusatzinformationen Speicherbaustein 256Kbit ansteuerbar ber den IC Bus Hitachi LCD Display 2 Zeilen jeweils 16 Zeichen Ethernet Controller Realtek RTL8019AS Controller User defined LEDs An zwei digitalen Ausg ngen des Controllers User defined Push Button An einen digitalen Pin des Controllers angeschlossen RS 232 Schnittstelle SeriellerPort ee Bereich An den Ausgangen der Ports angeschlossen BEE OT on der POS See ee Kapitel 1
29. Daher waren die verwendeten Beispiele nicht wirklich verwendbar sondern nur zur kurzen Anschauung Sinnvoll Jetzt kommen wir auch schon zum Eigentlichen Problem in dieser Phase des Projekts Da nicht nur die Beispiele sondern auch die ganzen Software Peripherie Bibliothek f r das PICDEM 2 Plus Demo Board ausgelegt war konnte man wichtige Teile der Bibliothek nicht verwenden Also alle Funktionen die z B f r das Ansprechen der Seriellen Schnittstelle Dioden oder des LCD Displays zur Verf gung standen konnten auf Anhieb nicht genutzt werden Da dies ja im Eigentlichen Sinn kein Problem darstellen sollte wurden die Header Files der einzelnen Source Codes im Verzeichnis install directory h f r die Anpassung auf das verwendete Board zur Verf gung gestellt Hierf r ein Auszug aus dem XLCD Header File DATA PORT le mee te porc to which he WOD cece Limes ane cowwmested Tif sexx define DATA_PORT PORTB define TRIS DATA PORT TRISB ese 17CXX iC edn bios DATA ORT PORTC 17 PDV Vertiefung 11 07 2003 SE SERGE SE E DDRC EE CTRL PORT defines the port where the control lines are connected These are just samples change to match your application 2 if EE define RW_PIN PORTBbits RB6 PORT for RW define TRIS RW DDRBbits RB6 TRIS for RW define RS PIN PORTBbits RB5 PORT for RS define TRIS RS DDRBbits RB5 TRIS for RS define E PIN PORTBbits RB4 PORT for E define TRIS E
30. Externer Int 0 asm GOTO DecoderISR endasm Aufrufen der ISR per Assemblerbefehl GOTO else ifE INICONSTES TMROIF 1 c Timer 0 Int Bam COL semen Ou T endas else if PIRIbits RCIE 1 Beer Int casm GOTO USARTrxISR endasm pragma code Ab hier kann wieder der Linker bestimmen wie geseichert wird In dieser Funktion ermittelt man per Zugriff auf die jeweiligen Register welches Ger t nun einen Interrupt ausgel st hat und ruft die ISR dann mit dem Assembler Befehl GOTO auf Eine Interrupt Service Routine wird mit dem Pragma interrupt als solche gekennzeichnet Dies hat zur Folge dass beim Aufruf der Routine der 44 PDV Vertiefung 11 07 2003 Programmkontext auf einem Fastreturn Stack gespeichert wird und alle Interrupts gesperrt werden pragma interrupt DecoderISR void DecoderISR void direccion PORTSOLCS RBI Cicek EE INTCONbits INTOIF 0p Interrupt Flag l schen Eventuell m ssen die Interrupt Flags softwareseitig in den jeweiligen Registern gel scht werden 45 PDV Vertiefung 11 07 2003 5 Beispielprogramme Tutorials 5 1 Grunds tzliches Das hier ein Kapitel mit Tutorials entsteht entspricht einfach nur der Tatsache dass wir im Laufe unsres Projekts keinerlei richtige Einf hrung in die Software MPLAB v 6 20 gefunden haben Es gibt kleinere Projekte oder auch Minimale Dokumentationen die mitgeliefert wurden aber entweder sie gilt der g nzlich anders Aufgebauten
31. P 1 d Bedeutung WII Amplituden Sensor 2 Channel B d E Amplituden Sensor 1 Channel A un Bei der externen Spannungsversorgung f r den Motor auf dem Prototyp Bereich sollte noch erw hnt werden dass der u ere Kreis die Masse und die Innenseite 9V ist 6 2 4 Externe Schaltung Jetzt kommen wir zum Kern der externen Hardware Es musste sich n mlich eine L sung f r das folgende Problem finden Wir haben zwei Eing nge bei der H B cke aber drei Signale rechts links und das PWM Singal Das Bit f r Links liegt an RCO das Bit f r Rechts liegt an RC1 und die PWM wird an RC2 ausgeben PDV Vertiefung 11 07 2003 Die L sung f r das Problem ist dass wir die PWM Signale zusammen mit jeweils Rechts und Links auf eine UND Gatter laufen lassen Das eine wird dann auf den INPUT1 und das andere auf INPUT2 der H Br cke gelegt Wenn der Motor nun nach Rechts laufen soll wird einfach das Bit an RC1 auf 1 und an RCO auf 0 gesetzt Somit schaltet nur das UND Gatter f r die Rechts Stellung durch und gibt das Signal an den entsprechenden INPUT Eingang der H Br cke weiter Folgender Schaltplan sollte dies noch mehr verdeutlichen RBO 3 Sensor1 RB1 A3968SA DIP SES GROUND 9V REFERENCE 13 GROUND GROUND i u f 12 GROUND 5 V SUPPLY cl oam OUT op 10 INPUT a SENSE 2 9 INPUT RC SS 9 links 5V RC rechts RC p PWM Auf der Prototypflache des PICDEM net Demo Board wurden so
32. amp TICK PRESCALE VALUE 8 amp amp TICK PRESCALE VALUE 16 amp amp 1 1 1 1 TICK PRESCALE VALUE 32 amp amp TICK PRESCALE VALUE 64 amp amp TICK PRESCALE VALUE 128 amp amp TICK PRESCALE VALUE 256 terror Invalid TICK PRESCALE VALUE specified tendif This value is for Microchip 24LC256 256kb serial EEPROM e define EEPROM CONTROL 0xa0 Number of bytes to be reserved before MPFS storage is to start 79 PDV Vertiefung 11 07 2003 These bytes host application configurations such as IP Address MAC Address and any other required variables After making any change to this variable MPFS exe must be executed with correct block size See MPFS exe help message by executing MPFS define MPFS RESERVE BLOCK 32 tt x Comment Uncomment following lines depending on types of modules are required SCH define STACK USE ICMP define STACK USE HTTP SERVER define STACK USE MOTOR SERVER For demo purpose only each sample project defines one or more of following defines in compiler command line options See each MPLAB Project Node Properties under Project gt Edit Project menu In real applcation user may want to define them her Rf define STACK USE SLIP define STACK USE IP GLEANING define STACK USE DHCP define STACK USE FTP SERVER Following low le
33. an ANSI C Standart 1989 was auch f r seine mitgelieferten Bibliotheken gilt Die Bibliotheken kann man in 4 Gruppen fassen e Hardware Peripherie Funktionen e Software Peripherie Bibliothek e Allgemeine Software Bibliothek e Mathe Bibliothek Hierbei wird jetzt noch einmal unterschieden zwischen Prozessor spezifischen und allgemeinen Bibliotheken Die Hardware Peripherie Funktionen und die Software Peripherie Bibliothek sind Prozessor spezifisch denn sie beinhalten alle Peripherie Funktionen und die special function register SFR Definitionen Die Prozessor spezifischen Bibliotheken sind nach folgendem Schema benannt p processor lib ohne Leerzeichen nat rlich F r unseren verwendeten Mikroprozessor den 18f452 wurde also immer die Bibliothek p18f452 lib verwendet PDV Vertiefung 11 07 2003 Die Allgemeine Software Bibliothek und die Mathe Bibliothek gelten f r die gesamte PIC18 Architektur und somit ist auch keine Prozessorabh ngige Unterscheidung notwendig Wenn Funktionen aus diesen beiden Bibliothekne verwendet wurden so wird die clib lib hinzugelinkt Alle verwendeten Bibliotheken kann man f r sich selber umschreiben oder anpassen Die dazugeh rigen Souce Files findet man im Verzeichnis install directory src Wenn nun einige Funktionen umgeschrieben wurden so muss die Bibliothek neu erstellt werden Dazu liegen im src Verzeichnis verschieden Batch Dateien die das erstellen bernehmen Eine genaue Beschre
34. eingegangen ADCS2 AD Taktgeber f r Umwandlungszeit Auswahl Bits Es gilt die gleiche Tabelle und Aufteilung wie f r Register ADCONDO oben beschrieben nicht ee Werden als 0 gelesen Bel Basal PCFGO A D Port Konfigurations Bits In der Tabelle werden nur die relevanten und im Moment ben tigten Modi als Auszug aufgelistet Die Tabelle kann auch in dem Manual des PIC18F4x2 nachgelesen werden Es kann auch Anstatt Vcc eine andere Referenzspannung angegeben werden Wenn dies benotigt wird sollte im Manual des PIC18F4x2 nachgelesen werden Alle hier aufgelisteten Varianten haben Vcc als Referenzspannung 3 0 PDV Vertiefun 11 07 2003 A Analoger Eingang D Digitaler O Grunds tzlich gilt zu Beachten dass bei einem Board RESET alle Pins die als Analoge Eing nge genutzt werden auch als Analoge Eing nge konfiguriert werden ADRESH und ADRESL Register Es sollte erw hnt werden dass die Werte die nach einer Umwandlung in diesen Register stehen bei einem Power Reset nicht erhalten bleiben Nach einem Power Reset stehen undefinierte Werte in den Registern Wie man oben aus der Tabelle des ADCON1 Register erkenn kann kann man die Formatierung des 10 Bit Ergebnisses in den Registern ADRESH und ADRESL beeinflussen Folgende Grafik macht dies deutlich 10 bit Result ADFM 1 ADEM 0 y 2107 7 0765 0 man pL ww ge a ADRESH ADRESL ADRESH ADRESL 10 bit Result 10 bit Result Right Justif
35. interrupt h finclude decoder h finclude helpers h BORK KK KK kk kk kk kkk kkk Kk kk kkk Ck kk KK I k k k Globale Variable eR eA A 2 E22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 07 BOOL approx FALSE long speed soll 0 1234567890123456 ROM char blankLine EF ROM char errormsg oem Invalid Structure was sent DutyCycle was 1023 Port in XDATA was no RDONLY Port Port in XDATA was no WRONLY Port Port in XDATA was no RDWR Port rdrw in XDATA contained Ivalid value PWM value was Invalid BY zb 6 BYTE cts BYTE dsr BYTE dcts BYTE ddsr BOR RK KK A I I kK kkk kkk kkk kkk kk kk kkk AAA kk kkk kckckckck ck kokckck ck k k ok Funktionsdefinitionen HK A A 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 22 2 2 2 2 2 2 2 2 2 22 2 2 2 2207 Motorspeziefische Initialisirungen void MotorServerlInit void Erste Zeile des Displays loeschen XLCDGoto 0 0 XLCDPutROMString blankLine INTCONbits GIEH 0 Disable High Prio Interrupts INTCONbits GIEL 0 Disable Low Prio Interrutps RCONbits IPEN Enable Priority Interrupts Il m ER DecoderInit Decoder Modul Initialisieren Timer und PWM OpenTimerO TIMER INT ON amp TO 16BIT amp TO SOURCE INT amp TO PS 1 16 OpenTi
36. t4 Change default subnet mask r n t5 Enable DHCP amp IP Gleaning r n t6 Disable DHCP amp IP Gleaning r n t7 Download MPFS image r n t8 Save amp Quit r n r n Enter a menu choice 1 8 typedef enum MENU CMD MENU CMD SERIAL NUMBER 1 MENU CMD IP ADDRESS MENU CMD GATEWAY ADDRESS MENU CMD SUBNET MASK MENU CMD ENABLE AUTO CONFIG MENU CMD DISABLE AUTO CONFIG MENU CMD DOWNLOAD MPFS MENU CMD QUIT MENU CMD INVALID MENU CMD ROM char menuCommandPrompt r nSerial Number r nDefault IP Address r nDefault Gateway Address r nDefault Subnet Mask r nDHCP amp IP Gleaning enabled r n r nDHCP amp IP Gleaning disabled r n r nReady to download MPFS image Use Xmodem protocol r n r nNow running application hs ROM char InvalidInputMsg r nInvalid input received Input ignored r An Press any key to continue r n void USARTPutROMString ROM char str BYTE v while v str USARTPut v BYTE USARTGetString char buffer BYTE bufferLen BYTE v BYTE count count 0 do while USARTIsGetReady v USARTGet if v r v Nn break Counts buffer v buffer 0 if bufferLen 0 break while 1 return count BOOL StringTolPAddress char str IP ADDR buffer BYTE v
37. 0 6 8 10 motor serial c OK KK KK IK kk HH HH kk kk Ck Ck kc kk ck ck kckckck ck ck kckckck ck ck kokckck ck I k k Prozessdatenverabeitung Vertiefung Ansteurung eines Motors ber UDP mit Hilfe des PICDEM net Demoboards und dem USART Markus K hle Marco Kosinski 534931 X ox koX x motor serial c eK AA 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2207 OR KKK KK IK HH HH HH HH HH k k kk kk kokckck ck I I k k Headerdateien A EEE 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 22 2 2 2 2 2 2 2 2 2 22 2 2 2 2207 finclude lt pl8cxxx h gt finclude lt stdlib h gt finclude lt ctype h gt finclude lt timers h gt include lt string h gt include lt pwm h gt finclude interrupt h finclude decoder h finclude usart h 110 PDV Vertiefung
38. 11 07 2003 incl incl xlcd h defines h BOR KK KK KK A I KKK Ck kk KK kK kK kkk Ck kk Ck Ck A ck ckck ck ck kckckck ck ck kokckck ck ck kokck ck Globale Variable eR A A eA 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 07 ROM char blankLCDLine 1234567890123456 We OK KK KK kk kk HH HH I kk Ck Ck Ck HH HH kokckck ck ck kokck k Main Funktion OKCKCKCk Ck kckc kk ck k kc kc kk kckckck ck ck kckck ck ck ck kckck ck ck kck kc kc 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 207 int main void char data char xlcd buffer higher CHAR MAX Obere LCD Zeile char xlcd buffer lower CHAR MAX Untere LCD Zeile unsigned char pointer 0 unsigned duty cycle unsigned char row unsigned char col char mode LEFT RCONbits IPEN 1 Enable Priority Interrupts INTCONbits GIEH 0 Disable High Prio Interrupts INTCONbits GIEL 0 Disable Low Prio Interrupts INTCON2bits RBPU 1 Disable Pullups auf PORTB Initilisiren der Peripheri USARTInit XLCDInit DecoderInit OpenTimer0 TIMER INT ON amp TO 16BIT amp TO SOURCE INT amp TO PS 1 16 OpenTimer2 TIMER INT OFF amp T2 PS 1 16 amp T2 POST 1 1 Prescaler fuer PWM OpenPWM1 OxFF SetDCPWMI1 0x00 Interrupts einschalten INTCONbits GIEH 1 INTCONbi
39. 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 07 finclude lt pl8cxxx h gt include decoder h BOK KK KK I HH HH HH HH HH kokckck ck I k k k Funktionsdefinitionen KCKCK Ck EEE Ck E22 2 eA A 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 22 2 2 2 22 2 2 2 2 2 2 2 2 2 2 07 Initialisiert alle Register die zur Erfassung von Drehrichtung und geschwindigkeit benoetigt werden void DecoderInit void INTCONbits INTOIE 1 Enable ExtIntO INTCONbits INTOIF 0 Loeschen ExtIntO0 Flags INTCON2bits INTEDGO 1 Interrupt on Rising Edge Der externe Interrupt 0 ist default High Prio Pin 0 u 1 des PORTB gt Output TRISBbits TRISBO 1 TRISBbits TRISB1 1 108 PDV Vertiefung 11 07 2003 6 8 8 interrupt h OR KK KK KA Ck kk AA kk kk kk kk Ck kk kk Ck Ck kc kCk ck kckckokckckckckckckckck ck kokckck ck I k k k Prozessdatenverabeitung Vertiefung Ansteurung eines Motors ber UDP mit Hilfe des PICDEM net Demoboards und dem Microchip TCP IP Stack KAEKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK Markus K hle Marco Kosinski 534931 ob X oo x F HF X
40. 6 ADCONO 0510001001 7 Abwarten bis Konfiguration geschrueben ADCResult v 0 100 while ADCResult v 0 Konvertierung des AN1 Eingang ADCONObits GO 1 Konvertierung starten while ADCONObits GO Wenn Konvertierung fertig gt ADONO GO 0 cpu Werte auf ee ren schreiben ADCResult v 0 ADRESL ADCResult v 1 ADRESH 10 Bit Wert in ASCII String konvertieren Ee REEL Se Ne EE EE RE RAS Ping EE EE ee Input Ich denke der Code mit Kommentaren ist selbsterkl rend und braucht an dieser Stelle nicht weiter kommentiert zu werden Alle hier aufgelisteten Registertabellen kann im PIC18F4x2 Manual nachgelesen werden Dieses ist auf der CD im Ordner pdf verf gbar 4 6 Interrupts 4 6 1 Eigenschaften Der PIC18F452 verf gt ber die M glichkeit Interrupts zweier Priorit tsstufen zu bearbeiten Interrupts niederer Priorit t k nnen nur von Interrupts hoher Priorit t unterbrochen werden Hochpriore Interrupts k nnen nicht unterbrochen werden Tritt ein Interrupt auf so werden automatisch alle Interrupts gesperrt Der Controller kann Interrupts von verschieden Quellen bearbeiten e imerO 3 e PortB e USART Rc und Tx 43 PDV Vertiefung 11 07 2003 3 Externe Leitungen A D Wandler CPP1 und 2 EEPROM Flash Schreiboperationen Low Voltage Detection Alle Interrupt spezifischen Einstellungen wie Wahl der Priorit t und Maskieren der Interrupts sowie alle Ermittlungen we
41. ADCONO GO 1 91 PDV Vertiefung 11 07 2003 Wait until it is done E while ADCONO GO ys Save the result Z ADCResult v 0 ADRESL ADCResult v 1 ADRESH Convert 10 bit value into ASCII String y itoa ADCResult Val ANlString Reset RA2 pin back to digital output x ADCON1 0b10001110 RAO as analog input endif CGI Command Codes define CGI CMD DIGOUT 0 define CGI CMD LCDOUT 1 CGI Variable codes There could be 0 255 variables KE define VAR LED D5 0 define VAR LED D 1 define VAR ANAIN ANO 2 define VAR ANAIN AN1 3 define VAR DIGIN RB5 4 define VAR STROUT LCD 5 OK KK KK kk kk HH HH Sk kk Kk Ck k k k k k k k ck kckckck ck ck kokckck ck ck kokck Function void HTTPExecCmd BYTE argv BYTE argc PreCondition None Input argv List of arguments argc Argument count Output None Side Effects None Overview This function is a callback from HTTPServer task Whenever a remote node performs interactive task on page that was served HTTPServer calls this functions with action arguments info Main application should interpret this argument and act accordingly Following is the format of argv If HTTP action was thank htm name Joe amp age 25 argv 0 thank htm argv 1 gt name argv 2 gt Joe argv 3 gt age argv 4 gt 25 Use argv 0 as a command iden
42. ADONO GO 0 722 e Bit Werte auf ee ten schreiben ADCResult v 0 ADRESL ADCResult v 1 ADRESH jy 10 Bit Wert in ASCII String konvertieren itoa ADCResult Val ANOString Konvertierung des ANI mLngang Auszu g eV el Sources Am PICDEM net Board sollten RA2 RA7 digital sein sonst funktionieren x DED LCD wnc NIC niche korrekte Da es keinen Mode gibt bie dem ANO und AN1 analoge Inputs und der Rest x digitale Pins sind wir vor bergehend RA3 w hrend der AD Wandlung analog geschaltet Wenn die AD Wandlung um ist wird RA2 wieder zur ck auf digital geschaltet Right Justified EE nach links lesend RA3 gt analog ADCON1 0b10000100 ANI Eingang w hlen gt Bit 5 3 Fosc 32 gt Bit 7 6 ADCONO 0b10001001 Abwarten bis Konfiguration geschrieben ADCResult v 0 100 while ADCResult v 0 Konvertierung des AN1 Eingang ADCONObits GO 1 Konvertierung starten while ADCONObits GO Wenn Konvertierung fertig gt ADONO GO 0 8 Bit Werte auf ein 16 Bit Bereich schreiben ADCResult v 0 ADRESL 53 PDV Vertiefung 11 07 2003 ADCResultt vLil ADRESH 10 BitE Wert in ASCII String konvertieren PeEOG ADCRe Suki EE E Ee E EE RAS hime EE Eeer Da der Source Code ausf hrlich Kommentiert ist k nnen die Erkl rungen zu programmiertechnischen Fragen direkt aus dem Listing genommen werden Die Ansteuerung des A D Wandl
43. DDRBbits RB4 TRIS for E else 17CXX de ce en REN EE j Port for RW define TRIS RW DDRCbits RC5 EE ere Bis EC El EE E ES ROA GE for RS wy define TRIS RS DDRCbits RC4 JO abe Leone as define E PIN DOSE np MN EE toren define TRIS E DDRCbits RC6 SCENES OS M endif Es besteht also die M glichkeit die verwendeten Ports f r die Bibliothek anzupassen man betrachte im Auszug die fett gedruckten Zeilen Allerdings haben wir bis zu diesem Zeitpunkt keine Beschreibung der verwendeten Ports f r die auf dem Board verwendetete Peripherie gefunden Es besteht also im Moment keine M glichkeit die Bibliothek anzupassen was zumindest f r die Software Peripherie Bibliothek bedeutet dass wir sie nicht verwenden k nnen bevor wir die Ports herausgefunden haben Es sollte noch bemerkt werden dass die bei dem oben abgedruckten Auszug benutzen Ports nicht die auf dem PICDEM net Board verwendet Ports sind Das ist ein Original Auszug nach der Installation des C18 Compilers Die genaue Beschreibung f r das LCD Display folgt weiter unten Da nun festgestellt wurde dass die Bibliothek f r das Ansprechen des LCD Displays da die genaue Portbelegung nicht bekannt ist nicht ausreicht ist die letzte M glichkeit das reverse Engineering durch den mitgelieferten MCHPStack von Microchip 3 2 MCHPStack von Microchip Reverse Engineering Durch das eben beschriebene Problem ist hier ein kleine
44. HD44780 LCD Display Nach Untersuchungen an unserem LCD Display haben sich nun folgende Merkmale feststellen lassen e 5x8 Pixel Zeichendarstellung rechtes Bild Zeichen A 2 Zeilen 16 Zeichen pro Zeile 4 Bit Interface Bild 13 Hitachi LCD Display 2 Zeilen 16 Zeichen orm PDV Vertiefung 11 07 2003 4 3 2 LCD Controller An welchem Port nun das LCD Display genau angeschlossen ist konnte wieder nur Anhand des mitgelieferten MCHPStack herausgefunden werden Folgender Auszug aus dem xlcd Header File zeigt die Port und Pinbelegung Auszug aus xlcd h DR en mm eo define DATA PORT PORTD tderine TRILOODATATPORE TRICD define RW PIN PORTDbits RD5 EE define TRIS RW TRISDbits TRISD5 joo TURES atone IRN Y define RS PIN PORTDbits RD4 TPO o defines PRES RS OIF EI EE E EREDA EE define E PIN PORTAbits RA5 P DOE OT define TRIS E TRISAbits TRISA5 EE Die Anzahl der Zeichen und Zeilen auf dem Display konnte noch herausgefunden werden allerdings dass Wissen dass es sich hier um ein 4 Bit Interface handelt wurde erst an dieser Stelle erweitert Somit war nun auch klar wie das LCD Display konfiguriert werden kann Es gibt daf r nat rlich noch die Bibliotheksfunktion welche man auch der Einfachheit halber nutzen sollte Dennoch wird hier noch darauf Eingegangen wie man die genauen Datenw rter sich Anhand des HITACHI LCD Display Data Sheets zusammenstellt Das genaue Beispiel beinhaltet d
45. I k k k Function void XLCDInit void PreCondition None Input None Output None Side Effects None Overview LCD is intialized Note This function will work with all Hitachi HD447780 LCD controller eR EEE 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 I I 2 207 unsigned int CursorAddr 0 void XLCDInit void The data bits must be either a 8 bit port or the upper or lower 4 bits of a port These pins are made into inputs DATA PORT amp Oxf0 TRIS DATA PORT Ox0f TRIS RW 0 All control signals made outputs 103 PDV Vertiefung 11 07 2003 TRIS RS 0 TRIS E 0 RW PIN 0 R W pin made low RS_PIN 0 Register select pin made low E PIN 0 Clock pin made low Delay for 15ms to allow for LCD Power on reset XLCDDelayl5ms Setup interface to LCD TRIS DATA PORT amp Oxf0 DATA PORT Oxf0 DATA PORT l 0000000010 Function set cmd 4 bit interface E PIN 1 Clock the cmd in XLCDDelayb500ns E PIN 0 Delay for at least 4 1ms XLCDDelay4ms Setup interface to LCD DATA PORT amp Oxf0 Function set cmd 4 bit interface DATA PORT 0500000010 E PIN 1 Clock the cmd in XLCDDelay500ns E PIN 0 Delay for at least 100us XLCDDelayi00us DATA PORT amp Oxf0 Fun
46. Lochscheibe die f r die Erekennung der Drehrichtung sowie Geschwindigkeit eine hohe Anzahl von L chern was bedeutet dass man sehr genaue Ergebnisse bekommt Am linken Ende des Motors linkes Bild kann man die Drehachse mit seinen Kerben erkennen An dieser kann man durch einen Aufsatz ein Objekt welches gesteuert werden soll befestigen Auf dem rechten Bild kann die Lochscheibe erkennen welche am hinteren Ende des Motors eingebaut ist Die Lochscheibe hat 512 L cher welche durch 2 optische Sensoren abgetastet werden Folgende Grafik beschreibt das Verhalten der oensoren NC PDV Vertiefung 11 07 2003 Output Waveforms TONNEN P 24v y 24V CHANNEL A 1 52 3 sa AMPLITUDE CHANNEL B ROTATION Bild 22 Motorsensor Verhalten der optischen Sensoren Das Prinzip der Drehrichtungserkennung ist die Phasenverschiebung der zwei Amplituden Je nachdem in welche Richtung sich der Motor dreht ist die zweite Kennlinie 90 vor oder hinter der ersten Kennlinie Um die Drehrichtung auswerten zu k nnen muss die beiden Signale an zwei Eing nge des Microcontrollers gelegt werden die jedes Mal bei einer ansteigenden Amplitude einen Interrupt ausl sen Mehr dazu im Kapitel Realisierung Software Auf dem linken Bild kann man auch noch den Verbindungsstecker der den Motor mit dem PICDEM net Demo Board verbindet erkennen Wir haben hier einen RS 232 Stecker verwendet dessen Pinbelegung folgenderma en ist
47. ProcessSDATA SDATA unsigned GetDutyCycle void void SetDutyCycle unsigned endif MOTOR SERVER H 6 2 motor server c OR KK KK KA KKK KKK kK AA kk kK K Ck kk Kk k k KC kk kc kckckckckckokckckck ck kokckck ck I k k k Prozessdatenverabeitung Vertiefung Ansteurung eines Motors ber UDP mit Hilfe des PICDEM net Demoboards und dem Microchip TCP IP Stack Markus K hle Marco Kosinski 534931 oo XX X X ox kk Ck Ck CK CK CC CC C CCS CIC CC CC CC CCS KR KR Ck AK AK A A AK SIC Ck Ck Ck Ck A A AK E A FH e e AK A A A A ko ko ko ko ko motor server c eR EEE Ck kk CkCkCk Ck 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 I 22 2 2 2 2 2 2 2 2 2 22 2 2 2 2 07 BOK KK KR AA KKK kK kkk KK kK kkk KK kK k K k K k k kk k k k k K k k AA I k k k I k k k i Headerdateien eK AA kk Ck 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 07 include lt pwm h gt include lt timers h gt include lt stddef h gt include lt string h gt include motor_server h Fave PDV Vertiefung 11 07 2003 include udp h finclude mac h finclude xlcd h finclude
48. Puffer enth lt Zeichen AC bufferlread Ptr if read ptr gt BUFF SIZE read ptr 0 UMASK USART RX INT return TRUE else Puffer leer UMASK USART RX INT return FALSE else rw WRITE buffer write Ptr c if write ptr gt BUER SIZE write ptr 0 UMASK USART RX INT return TRUE Initialisiert alle benoetigten USART Register void USARTInit void IPRlbits RCIP Il Hn Make USART RX Interrupt High Prio SPBRG 15 TXSTAbits BRGH 0 Baudrate Low Speed select TXSTAbits SYNC 0 Asynchroner Modus RCSTAbits SPEN 1 Serial Port Enabled PIElbits RCIE 1 Enable USART RX Interrupt RCSTAbits RX9 0 8 Bit Empfang RCSTAbits CREN 1 Enable Receiver 6 8 3 xlcd h ORK KK KK AK A I KKK Ck kk kK kK kk kkk kK k k k kk kk k Ck kk ckck ck ck kckckck ck ck kokckck ck I k k k External LED access routines defs FileName XLCD h Dependencies compiler h Processor PIC18 Complier MCC18 v1 00 50 or higher HITECH PICC 18 V8 10PL1 or higher Company Microchip Technology Inc Software License Agreement The software supplied herewit
49. R cksetzwert Timer1 Modul 16 Bit Timer Counter Timer2 Modul 8 Bit Timer Counter mit 8 Bit periodischem Register Zeitbasis f r PWM Timer3 Modul 16 Bit Timer Counter Zwei Capture Compare PWM Module Adressierbarer USART Modul lC Bus 8 x 8 Hardware Multiplizierer 5 Digitale I O Ports Master Synchronous Serial Port Analoge Eigenschaften 10 Bit Analog Digital Wandler mit o Fastsampling rate o Umwandlung w hrend SLEEP Mode o Linearitat 1 LSB Programmierbare Low Voltage Zu wenig Spannung Erkennung Power On Reset Power Up Timer Watchdog Timer Programmierbarer Code Schutz Code Protection Power saving SLEEP Mode Ausw hlbare Oszillator Optionen In Circuit Programmierung In Circuit Debugging 3992 PDV Vertiefung 11 07 2003 3 3 5 Pin Diagram MCLR VPP e TER 40 O RB7 PGD RADAND 3 7 39 4 RBG PGC RA1 AM1 5 38 U RBS PGM RA2 AN2 VREF n 37 L 9 RB4 RA3 ANS3 VREF ai ap EI gg RB3 CCP2 RAATOCKI P 35 DI RB2 INT2 RAS ANA SSILVDIN 7 34 lt RB1 NT1 REO RD ANS s 8 33 Di RBO INTO RE1ANR ANG s 32 O 4 VDO RE2 CS AN7 T 31 L MESS 30 L RD7 PSP7 99 RD6 PSP6 28 O RD5S PSP5 PIC18F442 PIC18F452 Vss c OSCT CLKI enN OSC2 CLKO RAG r REOTIOSOTICK a s 26 L
50. Spannend dies nun ber das Internet Ethernet zu realisieren 6 1 2 Verwendete Materialien F r unser Projekt dem Ansteuern eines Gleichstrommotors bekamen wir nach und nach folgende Hard und Software Das PICDEM net Demo Board Dickes Embedded Ethernet Buch C18 ANSI C Compiler MPLAB IDE v6 10 ICD 2 In Circuit Debugger Einen Gleichstrommotor aus einem HP Drucker und den dazugeh rigen HEDS 9000 Sensor f r die Lochscheibe IC von Alegro SA3968A H Br cke 6 1 3 Verlagerung des Projektschwerpunkts Wenn man bis hierhin die Dokumentation gelesen hat kann man erkennen dass die ersten 5 Kapitel eine recht Ausf hrliche Einf hrung in die gegebene Soft und Hardware ergeben Ungef hr in dieser Reihenfolge und auch in dieser Gewichtung wie in der Dokumentation verlief unser Projekt Das Bedeutet dass wir mehr wissenschaftliche Forschung und Untersuchungen an dem PICDEM net Demo Board sowie deren Peripherie getatigt haben als unser eigentliches Projektziel verfolgen zu konnen Das eigentliche Hauptproblem waren die Dokumentationen zu dem PICDEM net Demo Board sowie f r den MPLAB DIE v6 x Da diese so gut wie nicht vorhanden waren vor allem die von dem PICDEM net Demo Board musste sehr viel Aufwand in die Untersuchung des PICDEM net Demo Board gesteckt werden Wenn also eine ausf hrliche und gute Dokumentation verf gbar gewesen w re h tte man eine lange Zeit sparen und sich dem eigentlichen Projekt widmen k nnen Somit hat si
51. This requires that no part of code is using this block during or before calling this function Once this function is done that block of memory is available for general use Overview This function implements XMODEM protocol to be able to receive a binary file from PC applications such as HyperTerminal Note In current version this function does not implement user interface to set IP address and other informations User should create their own interface to allow user to modify IP information Also this version implements simple user action to start file transfer User may evaulate its own requirement and implement appropriate start action F o EE EE EE E XX E eK KA A kk CkCkCk Ck kk CkCkCk Ck A A 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 I 2 207 define XMODEM SOH 0x01 define XMODEM EOT 0x04 define XMODEM ACK 0x06 define XMODEM NAK 0x15 define XMODEM CAN 0x18 define XMODEM BLOCK LEN 128 static BOOL DownloadMPFS void enum SM MPFS SM MPFS SOH SM MPFS BLOCK SM MPFS BLOCK CMP SM MPFS DATA state BYTE c MPFS handle BOOL lbDone BYTE blockLen BYTE lResult BYTE tempData XMODEM BLOCK LEN TICK lastTick TICK currentTick State SM MPFS SOH lbDone FALSE handle MPFSFormat Notify the host that we are ready to receive a lastTick TickGet do
52. Timers ausgeloest Berechnet die Drehgeschwindigkeit pragma interrupt TimerOISR void TimerOISR void speed ist long double tick_counter TMROPeriod 0 5 ticks ticks min U U min if direction RIGHT SPIN Speed ist speed ist tick_counter 0 Ruecksetzen des Zaehlers INTCONbits TMROIF 0 Ruecksetzen des Timer0Int Flags 6 7 8 websrvr c BOK KK KK KR HH kkk kk k k kk k k kk k k k kk kkk k k kk kkk k k kk I I k k S Example Web Server Application using Microchip TCP IP Stack KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK FileName WebSrvr c Dependencies string H usart h StackTsk h Tick h http h MPFS h Processor PIC18 Complier MCC18 v1 00 50 or higher HITECH PICC 18 V8 10PL1 or higher Company Microchip Technology Inc Software License Agreement The software supplied herewith by Microchip Technology Incorporated the Company for its PICmicro Microcontroller is intended and supplied to you the Company s customer for use solely and exclusively on Microchip PICmicro Microcontroller products The software is owned by the Company and or its supplier and is protected under applicable copyright laws All rights are reserved Any use in violation of the foregoing restrictions may subject the user to criminal sanctions under applicable laws as well as to civil liability for the breach of the terms and cond
53. ck h lt Zudem wird hier nicht auf jede Zeile des Source Codes eingehen da wir das Grundwissen von C und der Handhabung dieser als gegeben voraussetzen Somit wird hier lediglich der Quellcode abgedruckt und das grunds tzliche Prinzip der Vorgehensweise erkl rt Vielmehr ist sp ter das debuggen interessant was auch intensiver behandelt wird Das Prinzip wird nach dem Listing des Source Codes beschrieben Source Code main c 51 PDV Vertiefung 11 07 2003 include defines h include lt delays h gt include xled mn include delay h include lt string h gt F r Ausgabe der gewandeltetn Werte char ANOStringiel gt Fur Ausgabe ADO Char ANTS tring EE Ausgabe ADT ANO und AN1 wandeln void convertAD void void main void Zur berpr fung ob sich etwas ge ndert hat nur dann Ausgabe Chia ro TATION w Pur Ausgabe ADO Char MINNIE w3 F r Ausgabe ADI Ausgabe Text Ghar m ei Ee Char enr ise dnos EI ANT i EE j LCD Display initialisiera GING IDF ALE 2 XLCDClear while 1 convertAD 72 RI CUPIDE URSI SI e T xLCDClear Eege Anfangstext f r ADO while XLCDIsBusy XLCDEUESEr1ING anA String 7 ANO Analogen Wert rausschreiben while XLCDIsBusy XLCDPutString AN0String NCHS DIE eo G0 Anfangstext f r ADO while XLCDIsBusy XLCDPUTSCELNG anlStr1ne s Analogen Wert rausschreib
54. data lines are connected define DATA_PORT PORTD define TRIS_DATA_PORT TRISD CTRL PORT defines the port where the control lines are connected These are just samples change to match your application a define RW_PIN PORTD RD5 PORT for RW define TRIS RW TRISD RD5 TRIS for RW define RS PIN PORTD RD4 PORT for RS define TRIS RS TRISD RD4 TRIS for RS define E PIN PORTA RAS5 PORT for E define TRIS E TRISA RAS TRIS for E Die Information die wir zu Begin gesucht haben ist hier abgebildet die Port und Pinbelegung f r das LCD Display Wenn wir nun den Auszug aus der C18 Bibliothek f r das LCD Display und den Auszug aus dem MCHP Stack miteinander vergleichen so kann man erkennen wo die Unterschiede sind MCHPStack C18 Bibliothek define DATA PORT PORTD define DATA PORT PORTB define TRIS DATA PORT TRISD define TRIS DATA PORT TRISB define PORTD NE tdefine RW PIN Ee EDO define T TRISD define TRIS RW DDRBbits RB6 define PORTD define RS PIN PORTE bates TET define L ECKER define TRIS RS EE eh GE define PORTA define E PIN EE EE define F TRISA_ define TRIS E DDRBbits RBA4 20 PDV Vertiefung 11 07 2003 Der Datenport f r das LCD Display liegt bei dem PICDEM net Board an Port D w hrend es bei vielen anderen Demo Boards und deshalb wahrscheinlich auch in der Bibliothek an Port B liegt Leider k nnen wir jetzt immer noch nicht d
55. den ANO Potentiometer dreht keinerlei Ver nderung zeigt Nach l ngerem suchen und debuggen stellte sich heraus dass einfach nur die Beschriftung verkehrt herum aufgedruckt wurde Nun ist die Umwandlung des analogen Wertes an ANO fertig und auch recht einfach zu bew ltigen Interessanter wird es aber bei dem AN1 Eingang und da auf dem AD PDV Vertiefung 11 07 2003 PICDEM net Demo Board auch ein Potentiometer f r AN1 verf gbar ist wird dieser hier an dieser Stelle auch noch besprochen Da es keinen Modus gibt bei dem nur AN1 oder zusammen mit ANO als analogen Eingang zu verwenden und der Rest digitale IO Eing nge sind muss der n chst Beste Modi genommen werden Bei dem n chst Besten Modus wird der Eingang AN3 auch noch auf einen analogen Eingang geschaltet Da bei dem PICDEM net Demo Board Port A f r die Analogen Eing nge sowie f r die LEDs und das LCD Display verwendet wird ist es notwendig dass bis auf ANO und AN1 alle anderen Pins digitale I O Eing nge sind Es kann sonst zu merkw rdigen Ergebnissen bei den LEDs und dem LCD Display kommen Es ist daher zwingend notwendig nach dem Umwandeln des analogen Wertes an dem Eingang AN1 sofort wieder die Pins auf digitale I O Eing nge zur ck zu schalten F r die Umwandlung an AN1 gelten die gleichen Angaben wir bei der eben besprochenen Umwandlung an ANO Right ue nl sn gt analog ADCON1 005010000100 AN1 Eingang w hlen gt Bit 5 3 Fosc 32 gt Bit 7
56. die entsprechende LED kurz aufblinken Es soll nun folgende Peripherie genutzt werden e 2 Potentiometer auf dem PICDEM net Demo Board e Analog Digital Wandler Modul e LCD Display e User defined LEDs Das Projekt soll in C geschrieben werden und die verf gbare Entwicklungsumgebung von MPLAB kennen gelernt und genutzt werden Zudem soll einer der gro en Vorteile das In Circuit Debuggen durch das ICD 2 genutzt werden 46 PDV Vertiefung 11 07 2003 5 2 2 Projekt erstellen und konfigurieren F r das Projekt muss eine Projektumgebung erstellt werden Dies geschieht entweder mit dem Project Wizard oder Manuell Wir werden dies hier manuell durchgehen da man dann wei wo man nachschauen muss wen man zu einem sp teren Zeitpunkt etwas ndern m chte Neues Projekt erstellen Men Project gt New Project Name op LO Project Director D projekte 4D_LCD Browse Help Cancel Hierbei gilt zu Beachten dass der Pfad in dem das Projekt liegt die Zeichenlange von 65 Zeichen nicht berschreitet da sonst sp ter der Compiler wegen zu gro er Zeichenl nge abbricht Zudem m ssen die verwendeten Ordner manuell im Datei Explorer erstellt werden da dieser Wizard das nicht bernimmt Er kann nur in schon bestehende Verzeichnisse Projekte erstellen Es sollte nun folgende Projektumgebung zu sehen sein Ale PDV Vertiefung 11 07 2003 LL MPLAB IDE 6 20 File Edit View Project Debugger Programmer Co
57. fertig ist erkennen Jetzt kommt der Teil bei dem man den Vorteil der UNION erkennen kann In PDV wurde in einer Praktikumsaufgabe ein 16 Bit Timer verwendet bei dem man die zwei 8 Bit Teilzeiten zusammensetzen musste Damals wurde noch flei ig geshiftet und gebastelt damit am Ende dann ein 16 Bit Wort herauskam Die jetzt gezeigte L sung finde ich pers nlich wesentlich eleganter 8 Bit Werte auf ein 16 Bit Bereich schreiben ADCResult v 0 ADRESL ADCResult v 1 ADRESH jy 10 Bit Wert imn ASCII String konvertieren itoa ADCResult Val ANOString Man kann erkennen dass die beiden Teilergebnisse aus den ADRESL und ADRESH Registern als 8 Bit Worte in das Array geschrieben werden Zur Umwandlung f r die Ausgabe allerdings kann man dann ganz einfach auf das 16 Bit Wort zugreifen und muss nicht erst lange herumbasteln In diesem Beispiel wird das Ergebnis in einen String gespeichert um sp ter auf dem LCD Display ausgegeben zu werden Dies kann man im n chsten Kapitel in den Tutorials ausf hrlich nachlesen Bild 17 ANO und AN1 Potentiometer mit Ausgabe auf dem LCD Display Es sollte an dieser Stelle noch kurz erwahnt werden dass die Beschriftung der Potentiometer verkehrt herum ist Die Bezeichnung ANO gilt dem unteren Potentiometer und die Bezeichnung AN1 dem oberen Diese Erkenntnis zu erlangen hat uns mehrere Stunden gedauert da wir der Einfachheit halber erst ANO ansprechen wollten dieser aber wenn man an
58. genauer betrachtet wurde wir an dieser Stelle auch ein Auszug der Funktion voia xLCDCommand unsigned char cmd gelistet void XLCDCommand unsigned char cmd while XLCDIsBusy HA Namen ol EE rbi sis TRIS RW TRIS RS 0 Alle Controlle Signale als Output konfigurieren D D Lower nibble interface TRIS DATA PORT amp Oxf0 Die unteren 4 Bits als Output konfigurieren EE ir Bei lee EE aie ie nue Eeer EE ye DATA PORT cmd gt gt 4 Die h ren 4 Bits des Datenwort nach rechts schifften RW PIN 0 Controlle Signale f r Kommando setzen RS PIN 0 XLCDDelay500ns ESPTN COD Enable Signal aur 1 XLCDDelay500ns Bere O Aeae ee 10 Daten wurden direkt nach den Enable Signal gesendet Lower nibble interface DATA PORT amp 0xf0 Data Port wieder vorbereiten DEE ek e C MEINEM mendose seta lee XLCDDelay500ns ET Ee Enable Signal auf 1 XLCDDelay500ns EE MO Aae Saeimel en Daten wurden direkt nach den Enable Signal gesendet Data me Pork wieder als Inout ord ene TRIS IDATA PORT OE ASELA An dem letzten Auszug kann man erkennen wie das Datenwort in 2 Teile zerlegt wurde und dass die jeweiligen Teile immer schon vor dem setzen des Enable Bits an 31 PDV Vertiefung 11 07 2003 den Data Port gelegt wurden Somit konnte das anliegende Datenwort gleich nach dem R cksetzen des Enable Bits auf 0 gesendet werden Das HITACHI HD44780 LCD Display
59. lt das Programm schon vor der ersten Ausgabe an und wir laufen per Step Over die n chsten Schritte manuell wie in der folgenden Grafik erkennbar BED projekteAD LCD main c x 117 ZS Komvertierung des AND Eingang e 115 B ADCONOhits GO 1 Konvertierung starten 119 while aDCONObits Go Wenn Konvertierung fertig gt ADONO Go 120 i 121 8 Bit Werte auf ein 16 Bit Bereich schreiben 122 ADCResult v O ADRESL 123 ADCResult v i ADRESH 124 125 ZS 10 Eit Wert in ASCII String konvertieren 126 itoalADbCResult Val AN Strindg 127 125 129 ZS 130 Konvertierung des AN1 Eingang 131 132 Auszug aus MHCP Stack Source 133 Am PICDEM net Board sollten R z R 7 digital sein sonst funkti 134 LEDS LED und NIE nicht korrekt 135 Da es keinen Mode gibt bie dem ANO und AN1 analoge Inputs und 136 digitale Pins sind wir vor bergehend Ras w hrend der AD Wand 137 analog geschaltet Wenn die AD Wandlung um ist wird RAZ wiede 138 auf digital geschaltet 139 140 Right justified von rechts nach links lesend RAS gt a 141 mb ADCONT 0b10000100 142 an 4 F Bild 21 ICD 2 Debuggen Breakpoint gesetzt Folgende Schritte ergeben sich mit dem Sep Over Button e Umwandlung starten Warten bis fertig ADRESL in v 0 schreiben niedere 8 Bit ADRESH in v 1 schreiben h here 8 Bit 16 Bit Ergebnis in String schreiben Aktuell steht das Programm bei d
60. mit dessen Werten anzeigt Dann ist da noch 8 PDV Vertiefung 11 07 2003 ein normales Editor Fenster und unten links das Output Fenster welches die ganzen Status oder Compiler Meldungen anzeigt Es empfiehlt sich immer die neueste Version zu nehmen denn eines unserer Anfangsprobleme war dass es nur v6 10 gab und diese nicht fast USB 2 0 unterst tzte wie sich sp ter herausstellte Das hatte dann l ngere Zeit die folge dass das ICD 2 nicht erkannt wurde und es Merkw rdige und nicht Erkennbare Fehler beim Programmieren des Microcontrollers gab Erst mit der Version 6 20 lief es einwandfrei Die neueste Version kann man auf der Homepage von Microchip runterladen http www microchip com 1010 pline tools picmicro devenv mplabi mplab6 index htm Zudem sollte noch Erw hnt werden dass das Verzeichnis indem die Projekte liegen die L nge von 64 Zeichen nicht berschreiten darf denn sonst bricht der Compiler ab und es kann nicht kompiliert werden 2 3 Programmiersprachen Es gibt die klassische Methode die ganze Entwicklung in Assembler zu schreiben wie es bestimmt auch noch in vielen Projekten getan wird Wenn man dies tun m chte kann man die Entsprechende Dokumentation dazu lesen die in Mengen vorhanden ist Wir haben uns allerdings bei unserem Projekt daf r entschieden eine Hochsprache zu verwenden welches eine Abgespeckte C Version ist Daher wird hier nur eine Einf hrung f r den C18 Compiler und nicht f r Assembler gegeben
61. the Company for its PICmicro Microcontroller is intended and supplied to you the Company s customer for use solely and exclusively on Microchip PICmicro Microcontroller products The software is owned by the Company and or its supplier and is protected under applicable copyright laws All rights are reserved Any use in violation of the foregoing restrictions may subject the user to criminal sanctions under applicable laws as well as to Civil liability for the breach of the terms and conditions of this license THIS SOFTWARE IS PROVIDED IN AN AS IS CONDITION NO WARRANTIES WHETHER EXPRESS IMPLIED OR STATUTORY INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE THE COMPANY SHALL NOT IN ANY CIRCUMSTANCES BE LIABLE FOR SPECIAL INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON WHATSOEVER F F FF FF A I Author Date Comment le RUD RICE DID PERSE BORE IG RIBS RN DIB RUBY BIOS RSG DEDEDE EE RER DIOP RUE RIBS RORY PIED RGA DID RES RSS AR IURE Ring Nilesh Rajbharti 8 10 01 Original Rev 1 0 Nilesh Rajbharti 2 9 02 Cleanup Nilesh Rajbharti 5 22 02 Rev 2 0 See version log for detail bk KKK RK KK I A kkk KK kK kk kkk kkk K k k kk kk AA A I kkk I I kk kk I k k k Prozessdatenverabeitung Vertiefung Ansteurung eines Motors ber UDP mit Hilfe des PICDE
62. value extraction and return updated reference If there is no more values left for this variable application should send HTTP END OF VAR If there are any bytes to send application should return other than HTTP START OF VAR and HTTP END OF VAR reference THIS IS AN EXAMPLE CALLBACK MODIFY THIS AS PER YOUR REQUIREMENTS HK KA eA A ko 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 k ck kokck ck ck kckokck ck ck kokokckck ck kokck kk kk if defined STACK USE HTTP SERVER WORD HTTPGetVar BYTE var WORD ref BYTE val ob A A EE EE EE EE E E E o X EE EE EE E EE EE F F oo EE X ox First of all identify variable x4 switch var case VAR LED D5 if LATA3 val 0 else 93 PDV Vertiefung 11 07 2003 val 1 break case VAR LED D6 if LATA2 val 0 else val 1 break case VAR ANAIN ANO if ref HTTP START OF VAR ref BYTE 0 val ANOString BYTE ref if ANOString BYTE ref 0 return HTTP END OF VAR BYTE ref return ref case VAR ANAIN ANI if ref HTTP START OF VAR ref BYTE 0 val AN1String BYTE ref if AN1String BYTE ref 0 return HTTP END OF VAR BYTE ref return ref case VAR DIGIN RBS Xf PORTB RBS val 1 else val 0 break return HTTP END OF VAR endif if defined STACK USE FTP SERVER amp amp defined MPFS USE EEPR
63. von Microchip bernommen und f r eigene Zwecke abge ndert wurden 4 1 Allgemeine Definitionen defines h In unserem Source Code inkludieren wir immer die Datei defines h da diese alle globalen Definitionen wie z B selbst definierte Datentypen oder die Clock Frequenz Auszug aus defines h Datentypen festlegen typedef unsigned char BYTE EE typedef unsigned short int WORD 7 V6 bat define CLOCK FREQ 20000000 JE AZ typedef union OI WORD Val BYTE y2 WORD VAL 4 2 User LEDs Eines der bekanntesten Ansteuerungen die wohl berall verwendet werden sind LEDs Daher soll an diesem einfachen Beispiel deutlich gemacht werden wie man durch die spezifische Mikroprozessor Bibliothek Ports konfiguriert und auf diese zugegriffen wird Auf dem PICDEM net Demo Board gibt es 2 LEDs die von einer Anwendung aus genutzt werden k nnen Diese beiden LEDs konnen zudem noch zudem manuell von einem Jumper der oberhalb der rechten LED zu sehen ist aktiviert oder deaktiviert e ef m R9 De al Di um ia werden Wenn der Jumper gezogen ist k nnen diese USER LEDs nicht mehr angesprochen werden Das Bild wurde von unserer ersten Anwendung gemacht bei dem beide LEDs einfach abwechselnd blinken Man kann erkennen dass die linke LED gelb leuchtet Durch unsere Untersuchungen haben wir folgende Portpins f r die LEDs ausfindig gemacht LED 1 links PORTA PIN 2 LED 2 rechtes PORTA PIN 3 25 PDV V
64. 10 02 Optimized bake KKK RK KK I KKK KKK kK KKK kK kkk AA k k AA AA k k k I A eA A I k k k a Prozessdatenverabeitung Vertiefung e Ansteurung eines Motors ber UDP mit Hilfe des PICDEM net e Demoboards und dem USART S Markus K hle 5 Marco Kosinski 534931 KEKE KKK KKK KKK KKK KKK ck ck ck ck ck ck ck ck ck ck ck ck ck ck ck ck ck ck ck ck ck ck ck ck ck ck ck ck ck ck ck ck ck ck ck ck ck ck ck IK IK IK IK AK IK AK KK AK KH KO Aenderungen am Original Quellcode des LCD Displays unsigned int CursorAddr Globale Variable die die aktuelle x Adresse im LCD speichert X XLCDPut Wurde um Zeilenumbruchsfunktion erweitert XLCDGetCursorPos Neue Funktion die die aktuelle Position des Cursors im LCD in zwei bergebenen Variablen speichert S XLCDGoto ehemals ein Makro aendert nun auch den Wert von CursorAddr CKCKCKCk ck kckck ck ck k kc kc kck ck k kc kc k ck kckckck ck k kckck ck ck k kckck ck ck k k kc kc k ck kckckck ck ck kokokck ck ck kokckck ck I I ck x f finclude xlcd h include p18f452 h BOK KKK KK I kkk HH k kkk kk kk kk kkk k kk ck ckck ck ck kckckckck ck kokckck ck
65. 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 07 Der HighVector beginnt im Speicher an Adresse 0x0008 pragma code high vector 0x0008 void interrupt at high vector void if INTCONbits INTOIF 1 Externer Int 0 asm GOTO DecoderISRO endasm else if INTCON3bits INT1IF 1 Externer Int 1 asm GOTO DecoderISRl endasm else if INTCONbits TMROIF 1 Timer 0 Int asm GOTO TimerOISR endasm pragma code Jf KCKCKCKCKCk kk IK Ck kk HH HK HH k kkk k k k kk ck kckckckck ck kokckck ck ck k k k k Definitionen der Interrupt Service Routinen eR AA Ck 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 07 Routine wird wird bei Uebergang 0 gt 1 auf Pin0 an PORTB ausgeloest pragma interrupt DecoderISRO void DecoderISRO0 void direction PORTBbits RBl Wenn Pinl 1 gt FORWARD tick countertt if dsr counter 64 0 dsr 1 ddsr 1 INTCONbits INTOIF 0 Ruecksetzen des ExtIntO0 Flags Routine wird wird bei Uebergang 0 gt 1 auf Pinl an PORTB ausgeloest pragma interrupt DecoderISR1 void DecoderISRl void direction PORTBbits RBO Wenn Pin0 1 gt BACKWARD tick counter Lf 4 ets counter 364 0 cts 1 Acts 1 INTCON3bits INT1IF 0 Ruecksetzen des ExtIntl Flags Routine wird beim Ueberlauf des
66. 3 E Microchip TCP IP Stack Demo Microsoft Internet Explorer C9 Zur ck SE ES D D Datei Bearbeiten Ansicht Favoriten Extras Adresse httpf192 168 1 32 d Microchip TCP IP LEICHE Stack v2 11 Home Features Architecture Footprint Welcome Bottom half of this page illustrates a real time control of PICDEM net board Status section refreshes board This site 12 used to demonstrate the power and abilities of an information every few seconds and Commands section G bat embedded web server This site is powerd by issues command to toggle on board LEDs M crochip PIC microcontroler running Microchip TCP IP Stack Everything you see is served through a Microchip Push on board switch or rotate one of the potentiometers and PICDEM net Internet Ethernet demonstration board see the screen getting updated You may also click on one of the two LED command buttons to toggle on board LEDs Results Commands Potl 284 Toggle LED Potz 886 Toggle LED switch 1 LEDs D620 D52 e Fertig Bei m Ba Internet a Bild 10 Firmware Homepage auf Demo Board 14 PDV Vertiefung 11 07 2003 3 Untersuchen von Hardware und Peripherie des PICDEM net Demo Board Als kleines Vorwort wollen wir hierzu sagen dass wir keine Dokumentation zur Best ckung des PICDEM net Board und dessen Port und Pinbelegung im Internet oder bei dem Hersteller selbst gefunden haben Au er einer kleinen Einf hrung bei der grob aufgelistet w
67. 60 5 4 TIMER INTERRUPTS UND SERIELLE SCHNITTSTELLE INTERRUPT pp 00 0 PROJEKTAUFGABE UND DURCHFUHRUNG ccccccscssssssssssssssssscssssssssssssssssssssssssssssscsssssecessesess 61 6 1 EINB HRUNGIN DAS PROJEKTE eine elek t te eade eo 61 DIT SoD 0 ee 6l Di EE 6 61 3 Verlagerung des EE 61 6 2 REALISIERUNG HARDWARE essen 62 02 4 TUT EE 02 0 2 27 EE S rera inntenirkeiiaiehallieainieiiduer 62 Oo 63 Ow ANEC SO ea N A 64 6 3 REALISIERUNG SOPTIT WARE cse eege Ee te 66 6 3 1 Ansteuerung des Motors ber die serielle Schnittstelle 66 0 9 2 Motoransteuerung E 66 6 4 VA D 71 ANHANG nn HE bee 72 6 5 EIERE E a a E 72 6 6 HERE 72 6 7 SOURCE CODE MOTOR TD 73 73 Or SMO SPV wrod en E A E E A E E 74 E NEE 79 DEE EE 84 NR 84 0 85 Qu T CORI a nt a eier eet 85 Duo EE eelere te 86 6 8 SOURCE CODE MOTOR SERIAL ea ee nn 100 0 100 0 100 Oo 10 OO WO or r 103 GOI M esse nes nee be es eS 107 635820 TEE EM 108 0 108 OO 109 CGO 109 6 6 10 EE 110 PDV Vertiefung 11 07 2003 1 Einf hrung Das gesamte Projekt lief unter der Aufsicht von Prof Dr Linn und der Lehrveranstaltung PDV Vertiefung Zur genauen Projektbeschreibung und Durchf hrung sehe man im Kapitel 5 nach Die vorherigen Kapitel geben eine Einf hrung in die Materie da dies doch ein weitaus gr eres Proble
68. 8 3 2 9 Ergebnis des reverse Engineerins nannte aaa 21 3 3 MICROCONTROLLER BIC J er see a a O RAR 21 3 3 1 RISC Reduced Instruction Set Computer CRU 21 22 22 3 3 4 Spezielle Microcontroller Eigenschaften cc 22 In FDA EE 23 3 3 6 ee E EE 23 3 4 RN 23 2 9 GENBRBEBEERKENNTNISA FAZI WEE 24 4 ANSPRECHEN DER PERIPHERIE UND HARDWARE IN Ce 25 4 1 AT EGEMEINE DERINITIONEN DEFINES dus ee een 25 4 2 Bip sect 25 4 3 BSC DDS EE 27 e L EE 27 00 EE EIER Qo oC oo en i ne ASS 28 233 EE eeneg 32 E EE 33 4 4 ENT 33 Rud gEISOHSCIMON es RPE ee ee a ee ferta suem deeds 33 0 33 43 Konfizunerendes USART NG nel de le a 37 4 5 SN 37 2 3 7 ROE TOIT TU oink E t 7 E E 40 4 6 TINE HEEL Cdi EM RT c 43 43 4 6 2 Implementieren einer Interrupt Service Routine in Ce 44 5 BEISPIELPROGRAMME TUTORIALS 22000000000000s00000000000000000000000000000000000000000000000000000000000000 46 5 1 RENE 46 3 2 AD WANDLER UND ANZEIGE AUF DEM LCD DISPLAY nn 46 oe PDV Vertiefung 11 07 2003 UT MEN TL C oD 46 522 ER 47 E SONCE EE 5 5 2 4 Programmieren des Microcontroller mit JCD cece cece e 54 325 In Circuit Debugcen mit dem ICD EE 56 5 3 ZEICHEN BER SERIELLE SCHNITTSTELLE UND ANZEIGE AUF LCD eese
69. DIsBusy void void XLCDCommand unsigned char cmd unsigned char XLCDGetAddr void char XLCDGet void void XLCDGetCursorPos unsigned char row unsigned char col void XLCDGoto unsigned char row unsigned char col define XLCDGoto row col XLCDCommand col row 0x40 0x80 define XLCDClear XLCDCommand DISP_CLEAR define XLCDCursorRight XLCDCommand SHIFT CUR_RIGHT CursorAddr define XLCDCursorLeft XLCDCommand SHIFT CUR_LEFT CursorAddr define XLCDShiftLeft XLCDCommand SHIFT DISP LEFT CursorAddr define XLCDShiftRight XLCDCommand SHIFT_DISP RIGHT CursorAddr define XLCDCGRAMAddr addr XLCDCommand addr 0001000000 define XLCDDDRAMAddr addr XLCDCommand addr 0010000000 User defines these routines macros according to the oscillator frequency define XLCDDelay500ns XLCDDelay100us void XLCDDelayl5ms void void XLCDDelay4ms void void XLCDDelayi00us void endif 102 PDV Vertiefung 11 07 2003 6 8 4 xlcd c OK KK KKK A I KKK kkk KK kK k AA I k k k k k A k k k kk AA I k k k I Hk k k External LCD access routines kk Ck Ck CK CK CCCII CC CC KK AK KK KH KH KR AK AK AK AK A A CI IC CCS A A A S E A ke e Sk AK A A A A AI ko ko koko zk FileName XLCDsc Dependencies xlcd h Processor PIC18 Complier MCC18 v1 00 50 or higher HITECH PICC 18 V8 10PL1 o
70. Data Sheet ist als pdf im Unterordner pdf zu finden 4 3 3 Bibliotheksfunktionen Da es nun viele Prozeduren und Kommandos gibt die sich st ndig wiederholen und da es viel zu kompliziert ist diese st ndig manuell auszuf hren ist eine solche Bibliothek nur sinnvoll Unsere verwendete Bibliothek wurde von dem MCHPStack bernommen und angepasst Name der Bibliothek xlcd HITACHI LCD Display Header File xicd h MM Funktionen Initialisierung des HITACHI LCD Display e 4 Bit Interface 5x8 Pixel 2 Zeilen Cursor off nicht sichtbar Blink off blinkt nicht Display wird geloscht Die bergebenen Kommandos werden in 4 Bit Teilen an das LCD Display als Kommando gesendet Ein genaues Beispiel dazu findet sich im Kapitel vorher bei der Initialisierung des LCD Display Diese Funktion wird hauts chlich von anderen Bibliotheksfunktionen genutzt Schreibt ein einzelnes Zeichen auf das Display an die Stelle an die der Cursor steht NO e IE data Von BE Ot ee EES E D IST e oS er IQ Schreibt eine Zeichenkette die im ROM liegt auf das Display beginnend an der Stelle an der der Cursor steht Schreibt eine Zeichenkette String auf das Display beginnend an der Stelle an der der Cursor steht Es wird berpr ft ob das LCD Display noch besch ftigt ist Ist dies der Fall wird ein Wert ungleich O zur ckgegeben Wenn es bereit f r neue Kommandos oder nicht mehr besch ftig ist wird eine 0 zur ckgegeben ME C
71. EEPROM S MPFSPutBegin handle lResult XMODEM ACK for c 0 c lt XMODEM BLOCK LEN C MPFSPut tempDatalc handle MPFSPutEnd USARTPut lResult state SM MPFS SOH break This small wait is required if SLIP is in use 99 PDV Vertiefung 11 07 2003 If this is not used PC might misinterpret SLIP module communication and never close file transfer dialog box Sy if defined STACK USE SLIP BYTE i i 255 while i endif return TRUE endif void XLCDDelayl5ms void DelayMs 15 void XLCDDelay4ms void DelayMs 4 void XLCDDelayi00us void INTCON_GIEH DelaylOus 1 INTCON_GIEH 1 0 6 8 Source Code motor serial 6 8 1 usart h BOR KK KK kkk kk kk HH kk kkk kk kk kk HH HH ck kckckck ck ck kokckck ck k k k k k Prozessdatenverabeitung Vertiefung Ansteurung eines Motors ber UDP mit Hilfe des PICDEM net Demoboards und dem Microchip TCP IP Stack Markus K hle Marco Kosinski 534931 HH F X
72. FF gt Ox3FF 0x000 rechtsdrehend 0x400 Ox7FF gt 0x000 Ox3FF linksdrehend y unsigned GetDutyCycle void unsigned dc dc CCPRIL lt lt 2 CCP1CON amp 0x30 gt gt 4 if direction LEFT SPIN dc 0x400 else dc Ox3FF dc return dc Setzt modifizierten DutyCycle siehe GetDutyCycle void SetDutyCycle unsigned dc unsigned duty_cycle if dc amp 0x400 0x400 duty cycle do amp Ox3EFE SetDCPWMI duty cycle LATCbits LATCO 0 LATCbits LATC1 1 LATAbits LATA2 0 LATAbits LATA3 1 else if dc amp 0x400 0x000 duty cycle Ox3FF dc SetDCPWM1 duty cycle LATCbits LATCO 1 LATCbits LATCl 0 LATAbits LATA2 1 LATAbits LATA3 0 78 PDV Vertiefung 11 07 2003 6 7 3 StackTsk h OK KK KK IK kk HH HH HH HH HH ck kokckck ck k k KK i Microchip TCP IP Stack Definations for PIC18 FileName StackTsk h Dependencies compiler h Processor PIC18 Complier MCC18 v1 00 50 or higher HITECH PICC 18 V8 10PL1 or higher Company Microchip Technology Inc Software License Agreement The software supplied herewith by Microchip Technology Incorporated
73. GATE BYTE4 AppConfig MyMACAddr v 0 MY DEFAULT MAC BYTEI AppConfig MyMACAddr v 1 MY DEFAULT MAC BYTE2 AppConfig MyMACAddr v 2 MY DEFAULT MAC BYTE3 AppConfig MyMACAddr v 3 MY DEFAULT MAC BYTE4 AppConfig MyMACAddr v 4 MY DEFAULT MAC BYTES AppConfig MyMACAddr v 5 MY DEFAULT MAC BYTE6 if defined STACK USE DHCP defined STACK USE IP GLEANING AppConfig Flags bIsDHCPEnabled TRUE else AppConfig Flags bIsDHCPEnabled FALSE endif dif defined MPFS USE EEPROM p BYTE amp AppConfig XEEBeginRead EEPROM CONTROL 0x00 C XEERead XEEEndRead When a record is saved first byte is written as 0x55 to indicate that a valid record was saved M if c 0x55 XEEBeginRead EEPROM CONTROL 0x01 for c 0 c lt sizeof AppConfig c p XEERead XEEEndRead else SaveAppConfig endif DisplaylPValue amp AppConfig MyIPAddr TRUE if defined MPFS USE EEPROM static void SaveAppConfig void BYTE c BYTE p p BYTE amp AppConfig 95 PDV Vertiefung 11 07 2003 XEEBeginWrite EEPROM CONTROL 0x00 XEEWrite 0x55 for c 0 c lt sizeof AppConfig c XEEWrite pt t XEEEndWrite endif ROM char menul r n r n r MCHPStack Demo Application v1 0 Microchip TCP IP Stack 2 0 r n r n tl Change Board serial number r n t2 Change default IP address r n t3 Change default gateway address r n
74. Ger t und der Technologie nachsagen Der erste ist das Programmieren des Controllers w hrend dieser noch auf dem Board sitzt Er muss also nicht mehr wie noch bei vielen Projekten blich und bekannt immer vom Sockel geholt und auf ein entsprechendes Programmierger t gesteckt werden Der zweite gro e Vorteil ist das In Circuit Debuggen Es ist M glich die Werte von ausgew hlten Variablen zur Laufzeit zu beobachten oder sich Breakpoints setzen Zudem kann man noch jede Codezeile einzeln in Schritten durchgehen PDV Vertiefung 11 07 2003 Das Ger t und die Technologie in Zusammenhang mit der Software MPLAB IDE bringen komfortable Vorteile mit in die Entwicklung von Embedded Systems Erw hnenswert an dieser Stelle ist wenn man MPLAB ICD 2 mit der USB Schnittstelle benutzen m chte sollte man die MPLAB IDE Software vorher installieren denn sonst kann es passieren dass das Ger t nicht korrekt gefunden wird Bei der Installation der Software wird am Ende auch eine Installationsanleitung f r MPLAB ICD 2 angezeigt welcher man auch genauestens folgen sollte F r aktuelle Informationen ber MPLAB ICD 2 kann auf der Homepage von Microchip geschaut werden http www microchip com 1010 pline tools picmicro icds icd2 2 2 Software 2 2 1 MPLAB IDE v6 20 Die IDE Integrated Development Environment die Verwendet wird ist die von Microchip entwickelte MPLAB IDE v6 20 Sie erm glicht es Projekte zu managen zu programmiere
75. HP C18 f r externe Module aus Stack noch defined gelassen define TRUE 1 define FALSE 0 define CHAR MAX 16 ve Clock frequency value This value is used to calculate Tick Counter value UA define CLOCK FREQ 20000000 Jy HZ define ROM rom 107 PDV Vertiefung 11 07 2003 KK KK RK KK KK KK KK KK I KK KK I KK KK IK I KK IK KK KK KK KKK KK A Typdefinitionen HK KK kk k ck k kCk kk ck ck k kc k ck kc kckck kc k ck k kCk ck kc kck kk ck ck kc kc kck kc k ck k kc k ck kc k ck kk ck ck k ck ckckckckck ck kck ko kk d Datentypen festlegen typedef unsigned char BYTE 1 8 bit typedef unsigned short int WORD 16 bit um ein 16 Bit Wort mit 2 8 Bit W rtern schreiben zu k nnen typedef union _WORD VAL WORD Val BYTE 5612 3 WORD VAL dendif 6 8 6 decoder h KK KK KKK KK KR KK kk kk Ck Ck k Kk Ck KK kk KK Ck Kk kk kk kk ck kk kck ck ck ck k ck ckck ck ck ck k ck ck k kc kk ck u Prozessdatenverabeitung Vertiefung x Ansteurung eines Motors ber UDP mit Hilfe des PICDEM net Demoboards und dem USART 9 Markus K hle Marco Kosinski 534931
76. I k k k Function char XLCDGet void PreCondition XLCDIsBusy FALSE amp amp defined XLCD IS BLOCKING Input None Output Current data byte from LCD Side Effects None Overview None Note The data is read from the character generator i RAM or display RAM depending on current setup eK eA A 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 22 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 207 char XLCDGet void char data TRIS_RW 0 All control signals made outputs TRIS RS 0 RW PIN 1 RS PIN 1 XLCDDelay500ns E PIN 1 Clock the data out of the LCD XLCDDelay500ns data DATA PORT 4 amp 0xf0 read the upper nibble of data E PIN 0 Reset the clock line XLCDDelay500ns E PIN 1 Clock the next nibble out of the LCD XLCDDelay500ns data DATA PORT amp OxOf Read the lower nibble of data E PIN 0 RS PIN 0 Reset the control bits RW PIN 0 return data Return the data byte void XLCDPutString char string 105 PDV Vertiefung 11 07 2003 char v while v string XLCDPut v stringtt void XLCDPutROMString ROM char string char v while v string XLCDPut v string tt t void XLCDDelay4ms void int 1 for i 0 i lt 40 i XLCDDelayl00us void XLCDDelayi00us void
77. IS GING DI OU E ious EON In RECO MU Zur Steuerung des Cursors kann man die Zeile und Spalte angeben wohin der 2532 PDV Vertiefung 11 07 2003 Cursor gestellt werden soll L scht das LCD Display und setzt den Cursor an die Stelle 0 0 Es gibt noch weitere Funktionen die aber nur sehr selten und in unserem Projekt berhaupt nicht genutzt wurden Diese Funktionen sind dadurch hier auch nicht aufgelistet k nnen aber in dem Header File xlcd h nachgelesen werden 4 3 4 Ansteuerung in C Hier eine einfache Ansteuerung in C welche bei dem Tutorial Analog Digital Wandler auf dem LCD Display ausgeben weiter unten gebraucht wird Gad xled n void main void jy LCD Display inicialisiern XLCDIMLE E Ee ol DL Ee EE EE dis LED Display nichte mehri beschartigt while XLCDIsBusy j Ina daie erste Zeile schreiben EE XLCDEUESEELNG EE Warten bis LCD Display nicht mehr beschartigt while XLCDIsBusy 24 In cie zweite Zeile schreiben EE EE EE 4 4 Serielle Schnittstelle 4 4 1 Eigenschaften Die serielle Schnittstelle wird durch den internen USART Universal Synchronous Asynchronous Receive Transmit realisiert Wie der Name schon sagt hat diese Schnittstelle einige erweiterte Eigenschaften gegen ber dem Standart UART Im asynchronen Modus verh lt sich der USART wie ein UART und erm glicht somit die Kommunikation mit verschiedener Peripherie wie Modems oder CRTs Im synchronen Modus m glich als Ma
78. KK KK Re kkk kK kK kkk KK kk kk Ck Ck kk kk kkk kkk k k ck ck okckckckckckckckck ck kokckck ck I k k k x Definitionen bake define LEFT SPIN 0 define RIGHT SPIN 1 define DEL INT FLAGS INTCONbits INTOIF 0 INTCON3bits INTIIF 0 Jf KCKCKCKCKCk kCkCkCkCkCk HH HH HH HH HH HH KK I I KK Externe Globale Variable HR AA 2 EZ 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 07 extern volatile BYTE direction extern volatile long speed ist BOK KKK KK CkCkCkCk kk HH HH HH k kkk k HH HH HK I k k k i Deklarationen der Interrupt Service Routinen eR eA A kk Ck kk Ck 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2207 D void DecoderISRO0 void void DecoderISRl void void TimerOISR void endif INTERRUPT H 6 interrupt c OK KK KK KKK HH kk Ck Ck Sk K k k Kk kk K k ck ck ckckckckckckckck ck ck kokckck ck KH k k k gt Prozessdatenverabeitung Vertiefung x Ansteurung eines Motors ber UDP mit Hilfe des PICDEM net lt Demoboards und dem Microchip TCP IP Stack KKEKKKKKKKKKKKKKKKK KKK KKK KKK KKK KKK KH AK dir dio di dio AH AK AK A AH dio do A A dir dio dio A KH AK A A AK AK A A di di A A KH AK dio A KK Markus K hle Marco Kosinski 534931
79. M Cursor move Bild 14 Datenworttabelle fur HITACHI LCD Display weit t HEE wk ECH O F r die Konfiguration des LCD Displays ist folgende Zeile wichtig SE i setinterface data width DL number of Functionset o Jo lo Jo JuInIFe x x display lines N and character font Fi Es stellt sich also folgendes Datenwort heraus D7 D6 D5 D4 D3 D2 D1 DO PO 9 Ne ox Unterhalb der Tabelle findet man nun noch folgende Auswahlmoglichkeiten f r unser Datenwort aa Bedeutung 0 1 a 1 8 Bit Interface 0 4 Bit Interface 1 Zeile 4x7 Dots Die entsprechenden Bits die f r unser LCD Display gelten sind hier fett markiert Somit ergibt sich nun folgendes Datenwort welches unter anderem bei dem Initialisieren des LCD Displays an den LCD Controller gesendet werden muss 29 PDV Vertiefung 11 07 2003 Wer es es e4 es ee BEAT NOR en on i Rom Ea om oe io Wenn nun das Datenwort bekannt ist muss dieses noch an den LCD Controller gesendet werden Dazu gibt es nun folgende Regelung zur Erkennung einer Ubertragung Bus Timing Characteristics Ta 20 to 75 C Write Cycle RS A tas 4 RAW N y E Enable vi N des lt a EEE UK Ce M Data X Valid Data X I ts Bild 15 LCD Controller Zeitcharakteristik bei Datenwortubertragung Ohne auf die genauen Zeiten einzugehen diese konnen im LCD Display Data Sheet nachgelesen we
80. M net Demoboards und dem Microchip TCP IP Stack Markus K hle Marco Kosinski 534931 Aenderungen am Original Quellcode des TCP IP Stacks StackTsk h TCP DHCP FTP HTTP wurden per define ausgeschaltet Das define des MOTOR_SERVERS wurde hizugefuegt eK A A eA A kk CkCkCk Ck AA Ae AA kk Ck 2 2 2 2 2 2 k ck ck okckckckckckckck ck ck kokokckck ck kokck kk kk ifndef STACK TSK H define STACK TSK H include compiler h This value is used by TCP to implement timeout actions xy define TICKS PER SECOND 10 if TICKS PER SECOND lt 10 TICKS PER SECOND gt 2559 error Invalid TICKS PER SECONDS specified endif Manually select prescale value to achieve necessary tick period for a given clock frequency a define TICK PRESCALE VALUE 256 if TICK PRESCALE VALUE 2 amp amp V TICK PRESCALE VALUE 4 amp
81. MPLAB Version 5 x oder der Umgang mit der Software beschr nkte sich auf Verwendet wurde die Software MPLAB v6 x Da die Version 6 x erst gerade auf den Markt kam als wir angefangen haben gab es auch daher schon sehr wenig Dokumentation dar ber ber die Vorg nger Versionen 5 x gibt es sehr viel aber leider Unterscheiden sich die beiden Versionen im Men und Aufbau sehr so dass man diese Beschreibungen nicht verwenden konnte Zus tzlich gibt es eine kleine Einf hrung in den Projektaufbau die Notwendigen Einstellungen sowie das Debuggen Diese gesamten Einf hrungen werden einmal Ausf hrlich in dem Kapitel A D Wandler und Anzeige auf dem LCD Display erl utert da das eigentliche Programmieren bei diesem Projekt sehr gering ausf llt 5 2 AD Wandler und Anzeige auf dem LCD Display 5 2 1 Beschreibung Dieses Projekt diente uns selber am Anfang nach langwierigen Untersuchen des PICDEM net Demo Board und der Peripherie endlich ein paar Funktionen des Microcontrollers sowie das LCD Display zusammen zu benutzen Die Aufgabe die wir uns dabei gestellt haben war die zwei verf gbaren Potentiometer des PICDEM net Demo Board die an die beiden Analog Digital Wandler Eing nge ANO und AN1 angeschlossen sind zu nutzen deren Werte umzuwandeln und anschlie end auf dem LCD Display lokal auszugeben Als kleines Gimmick werden die LEDs genutzt Sobald sich ein analog anliegender Wert ndert und der A D Wandler wieder konvertiert soll
82. O V V V V V oOo C x x x x n dutycycle hat ein E typedef struct CDATA WORD direction WORD dutycycle long speed val CDATA Speed Data Struktur erlaubt es eine Geschwindigkeit in U min anzugeben die der Motor erreichen soll dummy wird nur genutzt um die Struktur als SDATA Struct zu kennzeichnen Bit 12 15 gt 1 speed val enthalt die Sollgeschwindigkeit und wird als Antwort die Ist Geschwindigkeit zugewiesen ay typedef struct _SDATA WORD dummy long speed val SDATA Error Data Struktur wird als Antwort bei aufgetretenen Fehlern an den Client gesendet dummy dient wieder nur der Kennzeichnung Bit 15 gt 1 message enth lt de Fehlertext Sy typedef struct EDATA WORD dummy char message 32 EDATA tt Externe Globale Varialbe A AA Ck 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2207 extern BYTE cts extern BYTE dsr extern BYTE dcts extern BYTE ddsr VERF HH HH HH HH k k k kkk k k ck I k k k Funktionsdeklarationen eR eA A 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 22 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 07 void MotorServer void void MotorServerlnit void void MotorServerShutdown void BYTE ProcessXDATA XDATA BYTE ProcessCDATA CDATA BYTE
83. OM ROM char FTP USER NAME ftp Zundert FTP USER NAME LEN define FTP USER NAME LEN sizeof FTP USER NAME 1 ROM char FTP USER PASS microchip define FTP USER PASS LEN sizeof FTP USER PASS 1 BOOL FTPVerify char login char password if memcmppgm2ram login FTP USER NAME FTP USER NAME LEN d if memcmppgm2ram password FTP USER PASS FTP USER PASS LEN return TRUE return FALSE endif OK KK KK KK HH HH HH HH HH ck kokckck ck k k KK Function void InitializeBoard void PreCondition None Input None Output None Side Effects None Overview Initialize board specific hardware Note None HK Ck CkCkCkCK 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 k ck kokckckckckckokck ck ck kokokckck ck I ck sk kk static void InitializeBoard void Setup for PORTA RAO as analog input while rests as digital i o lines XX ADCON1 TRISA 0b10001110 RAO as analog input Right justified 0x03 LCD is enabled using RA5 Ji PORTA RA5 0 Disable LCD Turn off the LED s SI LATA2 1 LATA3 1 94 PDV Vertiefung 11 07 2003 External data EEPROM needs pull ups so enable internal pull ups XX INTCON2 RBPU 0 XLCDInit XLCDGoto 0 0 XLCDPutROMString StartupMsg TXSTA 0b00100000
84. PEnabled XLCDGoto 1 14 if myDHCPBindCount lt 0x0a XLCDPut myDHCPBindCount 0 else XLCDPut myDHCPBindCount A if defined STACK USE MOTOR SERVER gt new MotorServerShutdown fendif 1234567890123456 ROM char blankLCDLine n static void DisplayIPValue IP ADDR IPVal BOOL bToLCD char IPDigit 8 if bToLCD Erase second line x XLCDGoto 1 0 XLCDPutROMString blankLCDLine Rewrite the second line iu XLCDGoto 1 0 itoa IPVal v 0 IPDigit if bToLCD XLCDPutString IPDigit XLCDPut else USARTPutString IPDigit USARTPut itoa IPVal v 1 IPDigit if bToLCD XLCDPutString IPDigit XLCDPut 90 PDV Vertiefung 11 07 2003 else USARTPutString IPDigit USARTPut itoa IPVal gt v 2 IPDigit if bToLCD XLCDPutString IPDigit XLCDPut else USARTPutString IPDigit USARTPut itoa IPVal gt v 3 IPDigit if bToLCD XLCDPutString IPDigit else USARTPutString IPDigit if defined STACK USE HTTP SERVER gt new static char ANOString 8 static char AN1String 8 static void ProcessIO void WORD_VAL ADCResult Select ANO channel Fosc 32 clock y ADCONO 05010000001
85. SPIN OK KK KR I kkk AA Ck kk KK kk kk kk Sk kk kk Ck A Ck ckckckckckckckckck ck kokckck ck ck k k k ck Implementierung des Interrupt Vektors eA eA A kk CkCkCk Ck 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 AA 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 07 pragma code high vector 0x08 void interrupt at high vector void if INTCONbits INTOIF 1 Externer Int 0 asm GOTO DecoderIsR endasm TR if INTCONbits TMROIF 1 Timer 0 Int j asm GOTO TimerOISR endasm Gg if PIRlbits RCIF 1 Recv Int asm GOTO USARTrxISR endasm fpragma code BOK KKK KKK HH HH HH k kkk k HH AA kk k I Hk k k Interrupt Service Routinen bake Der Interrupt wird ausgeloest wenn ein Zeichen empfangen wurde pragma interrupt USARTrxISR void USARTrxISR void char data while PIRlbits RCIF data RCREG read write buffer amp data WRITE Routine wird wird bei Uebergang 0 gt 1 auf Pin0 an PORTB ausgeloest pragma interrupt DecoderISR void DecoderISR void direction PORTBbits RB1 Pick countertt INTCONbits INTOIF 0 Routine wird beim Ueberlauf des Timers ausgeloest Berechnet die Drehgeschwindigkeit pragma interrupt TimerOISR void TimerOISR void speed long double tick_counter TMROPeriod ticks ticks min U U min if direction RIGHT SEIN speed speed tick counter 0 INTCONbits TMROIF
86. Simulieren und Debuggen Nach der Installation ist wichtig dass man den Treiber des ICD 2 Ger ts f r die USB Schnittstelle korrekt installiert Es gehen direkt nach der Installation verschiedene Browser mit der Installationsbeschreibung auf da ein eigener mitgelieferter Treiber verwendet wird und Windows das Ger t nicht automatisch erkennt Die korrekte Installation der Hardware Ger te wird vorausgesetzt Die erste Einstellung bevor man ein Projekt bearbeitet ist das Ger t was benutzt wird in unserem Fall der PIC18F452 Erreichbar im Men Configure gt Select Device Select Device m x Device Microchip Tool Support 3 MPLAB SIM GO PICSTART Plus MPLAB SIM3U GO PRO MATE Il 3 MPLAB ICD 2 MPLAB ICE 2000 MPLAB ICE 4000 PCMIEXCH Mo Module PCMI8XHO If the device you need is nat listed ar if the device is nat supported by the desired tool please check the Microchip weh site far any updates Yellow indicates Beta support Red indicates unsupported URL hip tww microchip com Cancel Help Bild 4 Configure gt Select Device Im Kastchen Microchip Tool Support kann man erkennen welche Tools von der software unterstutzt werden Zur Simulation wird MPLAB SIM benotigt und zum Beschreiben des EEPROM MPLAB ICD 2 10 PDV Vertiefung 11 07 2003 2 4 2 Firmware auf EEPROM schreiben Als erstes muss man Angeben welches Ger t zur Programmieren verwendet wird Programmer gt Select Prog
87. TDIS endif Private helper functions These may or may not be present in all applications 7 Ju static void InitAppConfig void static void InitializeBoard void if defined STACK USE HTTP SERVER gt new static void ProcessIO void endif void NotifyRemoteUser void static void DisplayIPValue IP ADDR IPVal BOOL bToLCD static void SetConfig void fif defined MPFS USE EEPROM static BOOL DownloadMPFS void static void SaveAppConfig void endif if defined STACK_ USE TCP gt new if defined MCHP C18 pragma interrupt HighISR save section tmpdata void HighISR void elif defined HITECH C18 if defined STACK USE SLIP extern void MACISR void endif void interrupt HighISR void endif TickUpdate if defined STACK USE SLIP MACISR endif if defined MCHP C18 pragma code highVector 0x08 void HighVector void _asm goto HighISR endasm pragma code return to default code section endif endif static void USARTPut BYTE c while TXSTA TRMT TXREG c static void USARTPutString BYTE s 88 PDV Vertiefung 11 07 2003 BYTE c while c s USARTPut Cc define USARTIsGetReady PIRI RCIF define USARTGet RCREG Main entry point E void main void TBLPTRU 0x00 Initialize a
88. USE FTP SERVER define AVAILABLE SOCKETS3 AVAILABLE SOCKETS2 2 else define AVAILABLE SOCKETS3 AVAILABLE SOCKETS2 endif if AVAILABLE SOCKETS3 lt 0 error Maximum TCP Socket count is not enough error Either increase MAX SOCKETS or decrease module socket usage endif if defined STACK USE DHCP if MAX UDP SOCKETS lt 1 error Set MAX UDP SOCKETS to at least One fendif fendif typedef enum BOOL FALSE 0 TRUE BOOL typedef unsigned char BYTE 8 bit 82 PDV Vertiefung 11 07 2003 typedef unsigned short int WORD 16 bit typedef unsigned short long SWORD 24 bit typedef unsigned long DWORD 32 bit typedef union SWORD VAL SWORD Val struct BYTE LSB BYTE MSB BYTE USB bytes SWORD VAL typedef union WORD VAL WORD Val BYTE v 2 WORD VAL define LSB a a v 0 define MSB a a v 1 typedef union DWORD VAL DWORD Val BYTE v 4 DWORD VAL define LOWER LSB a a v 0 define LOWER_MSB a a v 1 define UPPER _ LSB a a v 2 define UPPER MSB a a v 3 typedef BYTE BUFFER typedef struct MAC ADDR BYTE v 6 MAC ADDR typedef union IP ADDR BYTE v 4 DWORD Val IP ADDR typedef struct NODE INFO MAC ADDR MACAddr IP ADDR IPAddr NODE INFO typedef struct APP CONFIG IP ADDR MyIPAddr MAC ADDR MyMACAddr IP ADDR MyMask IP ADDR MyGat
89. Vertiefung PDV Liste V 7359 Dozent Prof Dr Linn PICDEM net Embedded Internet Ethernet Demonstration Board Programmierung eines Microchip Controllers zur Steuerung eines Gleichstrom Motors mit PIC C18 bers Netz Marco Kosinski 534931 Markus K hle 137544 PDV Vertiefung 11 07 2003 b EINE HRUNG Se oe ee oe oo ee une 4 2 GETTING STARTED oriri epe re ee 5 2 HARDWARE EE 5 5 24 2 VE PBT se Se N E E E ET E 7 22 SOLTWARE a ee ee a A A 8 222 MBREABIDENO Oe eege 68 2 3 BROGRAMMIERSERACHEN ra ee Oo oe de E E E A 9 2 9 2 3 2 Konfiguration der MPLAB IDE f r CIR 9 2 4 PROGRAMMIEREN DER DEMO FIRMWARE AUF EEPROM MIT MPLAB v6 20 esses 9 2 4 1 MPLAB DIE v6 20 Installation und Konfiguration 10 242 Firmware auf EEPROM schreiben aside tuo em Ea n eier 77 2 3 IDEMO FIRMWARE KONEIGURIBREN Aen ees 12 3 UNTERSUCHEN VON HARDWARE UND PERIPHERIE DES PICDEM NET DEMO BOARD 15 3 1 BIBLIOTHEKEN DES C LS COMPILER ires ee a ninin e a EEE e ATS 15 S d EE 15 3 1 2 Auflistung der unterst tzten Bibliothek Rouen 16 3 1 3 Anpassen der Prozessor Spezifischen Bibliotheken f r das PICDEM net Board 17 2 2 MCHPSTACK VON MICROCHIP REVERSE ENGINEERING nennen nnne nennen 18 3 21 MCHPStack als einzige Quelle bei externe Peripherie l8 3 2 2 Durchsuchen des Quellcodes von MCHPStack am Beispiel der Port und Pinbelegung des LCD 2 1
90. Y MASK BYTE3 AppConfig MyMask v 2 define MY MASK BYTE4 AppConfig MyMask v 3 Hardcoded LP address of this node My IP 10 10 5 10 Gateway 10 10 5 10 ES define MY IP BYTE AppConfig MyIPAddr v 0 define MY IP BYTE2 AppConfig MyIPAddr v 1 define MY IP BYTE3 AppConfig MyIPAddr v 2 define MY IP BYTE4 AppConfig MyIPAddr v 3 Harcoded Gateway address for this node This should be changed to match actual network environment 81 PDV Vertiefung 11 07 2003 x define MY GATE BYTE1 AppConfig MyGateway v 0 define MY GATE BYTE2 AppConfig MyGateway v 1 define MY GATE BYTE3 AppConfig MyGateway v 2 define MY GATE BYTE4 AppConfig MyGateway v 3 TCP configurations To minmize page update match number of sockets and HTTP connections with different page sources in a page For example if page contains reference to 3 more pages browser may try to open 4 simultaneous HTTP connections and to minimize browser delay set HTTP connections to 4 MAX SOCKETS to 4 and MAC TX BUFFER COUNT to 4 If you are using ICMP or other applications you should keep at least one socket available for them Maximum sockets to be defined Note that each socket consumes 36 bytes of RAM xy define MAX SOCKETS 5 Avaialble UDP Socket ay define MAX UDP SOCKETS 2 if MAX SOCKETS lt 0 MAX SOCKETS gt 255 error Invalid MAX SOCKETS value specified endif
91. auch die genauen Pins f r die zwei Dioden gefunden welche wir ansteuern wollten F r unsere Anwendung haben wir die verwendeten Bibliotheks Funktionen z B xlcd h und xlcd c von dem MCHPStack bernommen und f r unsere eigenen Zwecke abgewandelt Dies war wesentlich einfacher als die gegebenen C18 Bibliotheks Funktionen um zu schreiben oo wurde die von den C18 Compiler mitgelieferten Bibliotheken die Gruppe Software Peripherie Bibliothek durch eigene bzw bernommene und abgewandelte Bibliotheks Funktionen des MCHPStacks ersetzt 3 3 Mlicrocontroller PIC18F452 Das PICDEM net Demo Board wird von Haus aus mit dem PIC18F452 Microcontroller best ckt Dieser Microcontroller ist weit verbreitet und es gibt viele Anwendungen und Beispiele die mit diesem arbeiten Das wohl mit am weitesten verbreitete Demo Board aus dem Hause Microchip mit dem Microcontroller PIC18F452 ist das PICDEM 2 Plus Demo Board 3 3 1 RISC Reduced Instruction Set Computer CPU e Linearer Program Speicher 32 KByte Adressierbar e Linearer Daten Speicher 1 5 KByte Adressierbar pn PDV Vertiefun 11 07 2003 3 3 3 LA LA D Speicher bersicht On Chip Program Memory On Chip Data FLASH Single Word RAM EEPROM bytes Instructions bytes bytes 16384 1536 16 Bit gro e Instruktionen 8 Bit Datenleitung Priorit tslevel f r Interrupts Peripherie 3 externe Interrupt Pins TimerO Modul 8 Bit oder 16 Bit Timer Counter mit 8 Bit
92. c gt 717 amp amp dc lt 819 70 80 data gt value 0x03 PDV Vertiefung 11 07 2003 else if dc gt 819 amp amp dc lt 922 80 90 data gt value 0x01 else 90 100 data gt value 0x00 else return ENORDONLY else if data gt rdwr amp OxFF WRONLY if data gt port LCR if data gt value amp BRKST SetDCPWM1 0x00 else if data gt port amp OxFF DPORT if data gt value 0x00 SetDCPWM1 922 90 else if data gt value 0x01 SetDCPWM1 819 80 else if data gt value 0x03 SetDCPWM1 717 70 else if data gt value 0x07 SetDCPWM1 614 60 else if data gt value Ox0OF SetDCPWM1 512 50 else if data gt value Ox1F SetDCPWM1 410 40 else if data gt value Ox3F SetDCPWM1 307 30 else if data gt value Ox7F SetDCPWM1 205 20 else if data gt value OxFF SetDCPWM1 102 10 else return EXPWM else if data gt port amp OxFF MCR if data gt value amp DSR Laufrichtung Links LATCbits LATCO 0 LATCbits LATC1 1 LATAbits LATA2 0 LATAbits LATA3 1 else LATCbits LATCO 1 LATCbits LATC1 0 LATAbits LATA2 1 LATAbits LATA3 0 else re
93. ch im Ganzen der Schwerpunkt des Projekts auf Forschung und Untersuchung verlagert und auch die Dokumentation hat dadurch den Schwerpunkt der ausf hrlichen Einf hrung in die Materie 61 PDV Vertiefung 11 07 2003 Dennoch war es unser Anliegen das gegebene Projektziel zu erreichen was uns gegen Ende noch gegl ckt ist Daher gibt es die n chsten Kapitel ber die Realisierung der Projektaufgabe 6 2 Realisierung Hardware 6 2 1 Einf hrung Es gilt einen Motor durch den Microcontroller zu steuern Wie das im speziellen auf der Softwareseite gel st wurde wird im n chsten Kapitel beschrieben Grunds tzlich gilt dass der Motor ber eine H Br cke mit Pulsweitenmodulation gesteuert werden soll Wir haben hierf r einen ausgebauten HP Druckermotor erhalten der einen HEDS 9000 Sensor enth lt Zudem bekamen wir eine H Br cke mit eigener Logik in einem IC so dass man diese H Br cke im Bedarfsfall schnell und einfach auswechseln kann Da noch niemand mit dieser speziellen Hardware gearbeitet hatte musste diese also erst Untersucht und Datenbl tter gefunden werden weshalb hier nun auch genauer auf die Hardware eingegangen wird Zudem galt es seine erworbenen Elektrotechnik Kenntnisse wieder aufzufrischen und anzuwenden 6 2 2 Allegro SA3968A H Br cke Das besondere an diesem IC ist dass er zwei Motoren gleichzeitig ansteuern kann Jedes IC beinhaltet zwei H Br cken welche einen kontinuierlichen Output von 650mA und eine Arbeit
94. char temp BYTE byteIndex temp str byteIndex 0 while v str if v str KT buffer gt v byteIndex atoi temp temp str else if v 0 v 9 return FALSE 96 PDV Vertiefung 11 07 2003 strt t buffer gt v byteIndex return atoi temp byteIndex 3 MENU CMD GetMenuChoice void define MAX USER RESPONSE LEN void ExecuteMenuChoice MENU CMD choice BYTE c while USARTIsGetReady c USARTGet if c gt 1 amp amp c lt MENU CMD INVALID return Cc else return MENU CMD INVALID 20 char response MAX USER RESPONSE LEN IP ADDR IP ADDR USARTPut USARTPut tempIPValue destIPValue ECNE EINE USARTPut tROMString menuCommandPrompt choice 0 1 switch choice case MENU_CMD SERIAL NUMBER itoa AppConfig SerialNumber Val USARTPutString response USARTPut USARTPut USARTPut response if USARTGetString response sizeof response AppConfig SerialNumber Val atoi response AppConfig MyMACAddr v 4 AppConfig MyMACAddr v 5 AppConfig SerialNumber v 1 AppConfig SerialNumber v 0 else goto HandleInvalidInput break case MENU_CMD IP ADDRESS destIPValue amp AppConfig MyIPAddr goto ReadIPConfig case MENU_CMD GATEWAY ADDRESS destIPValue amp AppConfig MyGateway goto Rea
95. ckckckckckokckck ck ck kokckck ck I k k k Function unsigned char XLCDGetAddr void PreCondition XLCDIsBusy FALSE amp amp defined XLCD IS BLOCKING Input None 106 PDV Vertiefung 11 07 2003 Output Current address byte from LCD Side Effects None Overview None Note The address is read from the character generator X RAM or display RAM depending on current setup eR EEE 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 207 unsigned char XLCDGetAddr void char data Holds the data retrieved from the LCD TRIS_RW 0 All control signals made outputs TRIS RS 0 data DATA PORT 4 amp 0xf0 Read the nibble into the upper nibble of data E PIN 0 Reset the clock XLCDDelay500ns E PIN 1 Clock out the lower nibble XLCDDelay500ns data DATA PORT amp OxOf Read the nibble into the lower nibble of data E PIN 0 RW PIN 0 Reset the control lines return data amp 0x7f Return the address Mask off the busy bit void XLCDGetCursorPos unsigned char row unsigned char col row CursorAddr gt gt 4 col CursorAddr amp OxO0F void XLCDGoto unsigned char row unsigned char col CursorAddr col row lt lt 4 XLCDCommand col row 0x40 0x80 6 8 5 defines h KK KK KKK KK KR KK kk kk kk Ck kk k
96. clude stacktsk h include tick h if defined STACK USE DHCP finclude dhcp h endif if defined STACK USE HTTP SERVER finclude http h endif include mpfs h dif defined STACK USE FTP SERVER amp amp defined MPFS USE EEPROM include ftp h endif include xlcd h dif defined MPFS USE EEPROM finclude xeeprom h endif For debug only if defined STACK USE TCP gt new include tcp h endif include icmp h finclude delay h if defined STACK USE UDP 87 PDV Vertiefung 11 07 2003 include udp h endif if defined STACK USE MOTOR SERVER gt new include motor server h endif ROM char StartupMsg MCHPStack v2 11 if defined STACK USE DHCP defined STACK USE IP GLEANING ROM char DHCPMsg DHCP Gleaning endif ROM char SetupMsg Board Setup This is used by other stack elements Main application must define this and initialize it with proper values pe APP CONFIG AppConfig BYTE myDHCPBindCount 0 if defined STACK USE DHCP extern BYTE DHCPBindCount else If DHCP is not enabled force DHCP update Af BYTE DHCPBindCount 1 endif Set configuration fuses for HITECH compiler For MCC18 compiler separately linked config asm file will set the correct fuses S if defined HITECH C18 __CONFIG 1 UNPROTECT amp HS CONFIG 2 PWRTEN amp BORDIS amp WD
97. coder c BOK KKK KK KA AA kkk kK kK kk kkk kK k k k k k k k k k k k k k kk k k AA kk k I k k k S Prozessdatenverabeitung Vertiefung Ansteurung eines Motors ber UDP mit Hilfe des PICDEM net a Demoboards und dem Microchip TCP IP Stack KKKKKKKEKKKKKKKKKKK KKK KKK KKK KKK KKK KKK KKK KKK KK KK KKK KKK KH AK A kk kk kk zk Markus Kuhle Marco Kosinski 534931 i decoder c eA A A kk kk Ck 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 k kk kj BORK KK KK KA HT HH kK kk kk kk kkk kk kk HH kokckck ck ck k k k k x Headerdateien bake finclude lt pl8cxxx h gt include decoder h VERKEHR ck kokckck ck k k U k k Funktionsdefinitionen eR eA A 22 2 A A 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 07 Initialisiert alle Register die zur Erfassung von Drehrichtung und geschwindigkeit benoetigt werden void DecoderInit void INTCONbits INTOIE 1 Enable ExtIntO INTCONbits INTOIF 0 Loeschen ExtIntO0 Flags INTCON2bits INTEDGO 1 Interrupt on Rising Edge og Der externe Interru
98. ction set cmd 4 bit interface DATA PORT 0500000010 E PIN 1 Clock cmd in XLCDDelayb500ns E PIN 0 TRIS DATA PORT 0x0f Make data nibble input Set data interface width 4 lines font XLCDCommand XCLD TYPE Function set cmd Set DD Ram address to 0 XLCDCommand XCLD TYPE XLCDCommand DOFF amp XLCD DISPLAY SETUP XLCDCommand DON amp XLCD DISPLAY SETUP Clear display XLCDCommand 0x01 Clear display Set entry mode inc no shift XLCDCommand SHIFT CUR LEFT Entry Mode Set DD Ram address to 0 XLCDCommand 0x80 return BOK KK KK kkk KKK KKK KKK KK kK kK kK K kK kk kK K k k AA K kckckckckckckckckckck ck ck kokckck ck ck k k k k Function void XLCDCommand unsigned char cmd PreCondition XLCDIsBusy FALSE if defined XLCD IS BLOCKING Input cmd Command to be set to LCD x Output None Side Effects None Overview None Note None eR eA A A A A Ae AA 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 207 void XLCDCommand unsigned char cmd TRIS_RW 0 All control signals made outputs TRIS RS 0 TRIS DATA PORT amp Oxf0 DATA PORT amp Oxf0 DATA PORT cmd gt gt 4 RW PIN 0 Set control signals for command RS PIN 0 XLCDDelayb500ns E PIN 1 Clock command in XLCDDelay500ns E PIN 0 DATA PORT amp
99. dIPConfig case MENU CMD SUBNET MASK destIPValue amp AppConfig MyMask ReadIPConfig DisplayIPValue destIPValue USARTPut USARTPut USARTPut FALSE USARTGetString response sizeof response if StringToIPAddress response HandleInvalidInput USARTPutROMString InvalidInputMsg while USARTIsGetReady USARTGet amp tempIPValue else destIPValue gt Val tempIPValue Val break case MENU_CMD ENABLE AUTO CONFIG AppConfig Flags bIsDHCPEnabled TRUE break case MENU CMD DISABLE AUTO CONFIG AppConfig Flags bIsDHCPEnabled FALSE break case MENU CMD DOWNLOAD MPFS dif defined MPFS USE EEPROM DownloadMPFS endif break case MENU_CMD QUIT 97 PDV Vertiefung 11 07 2003 dif defined MPFS USE EEPROM SaveAppConfig endif break static void SetConfig void MENU_CMD choice do USARTPutROMString menu choice GetMenuChoice if choice MENU CMD INVALID ExecuteMenuChoice choice while choice MENU CMD QUIT if defined MPFS USE EEPROM BORK KK KK KR KKK Kk kkk KKK kkk kK kkk kkk kkk k k k k k kk k k k ck ckckckckckckckck ck ck kokckck ck ck kokck ck Function BOOL DownloadMPFS void PreCondition MPFSInit is already called Input None Output TRUE if successful FALSE otherwise Side Effects This function uses 128 bytes of Bank 4 using indirect pointer
100. efung 11 07 2003 Die Einstellungen f r das Terminalprogramm sind folgende e Bits per Second 19200 e Data Bits 8 e Parity none e Stop Bits 1 e Flow Control none Nachdem das Terminal konfiguriert ist kann man durch gleichzeitiges dr cken beider Taster das Setup Men aufrufen Auf dem LCD Display des Demo Boards erscheint die Schrift Board Setup und im Hyper Terminal folgendes pdy HyperTerminal E E x Datei Bearbeiten Ansicht Anrufen bertragung 3 MCHPStack Demo Application v1 8 Microchip TCP IP Stack 2 8 Change Board serial number Change default IP address Change default gateway address Change default subnet mask Enable DHCP amp IP Gleaning Disable DHCP amp IP Gleaning Download MPFS image Save amp Quit Enter a menu choice 1 8 k Merbunden 00 00 27 ANSI 19200 B N 1 RF GROSS num Aufzeichnen Druckerecho m E Bild 9 Hyper Terminal Konfiguration Firmware Um die IP Adresse zu ndern muss nun die 2 gedr ckt werden Nach der Eingabe der neuen Adresse kann bei Bedarf auch noch die Subnet Mask ge ndert werden Als n chstes wird noch Men punkt 6 gew hlt um DHCP auszuschalten Zum Schluss die Konfiguration durch dr cken der 8 beenden Wenn man nun die eben bei der Konfiguration angegebene IP Adresse in den Browser eingibt sollt die Firmware Homepage erscheinen sofern das Demo Board auch mit im gleichen Ethernet h ngt PDV Vertiefun 11 07 200
101. eiben kann in das Array aber mit einem Zugriff das 16 Bit Wort lesen kann Die genaue Anwendung dieses Vorteils wird gleich in dem C Auszug sichtbar j Zur Erstellung des T Brt Wortes WORD VAL ADGResuli NO ADCONO 0b10000001 Analog Digitalwandler initialisieren ADCONIL 0910001110 Daes 10 Bit Wore soll von Rechts ks geschrieben werden ANO wird zu einem Analogen Eingang geschaltet ADCONO F r Fosc 32 m ssen Bit 7 und 6 die Bitkombination 10 erhalten Um den A D Wandler zu starten muss das Power On Bit 0 auf 1 gesetzt werden ADCON 1 Damit das LSB des Results im LSB das ADRESL Register steht muss Bit 7 auf 1 gesetzt werden Da Fosc 32 genutzt werden soll wird Bit 6 auf O gesetzt Die Bits 3 bis O haben die Bitkombination 110 was bedeutet dass nur der Pin O f r den Eingang ANO als analoger Eingang verwendet wird Da nun die Konfiguration erst einmal geschrieben werden muss bevor die Umwandlung gestartet werden kann sollte man direkt danach einen kleine Verz gerung einbauen In unserem Fall wird dies folgenderma en gel st Abwarten bis Konfiguration geschrieben ADCResult v 0 100 41 PDV Vertiefung 11 07 2003 while ADCResult v 0 Nun kann die Umwandlung starten Konvertierung des AND Eingang ADCONObits GO 1 L Konvertierung starten while ADCONObits GO Wenn Konvertierung fertig gt ADONO GO 0 Man kann hier gut das Abwarten bis die Umwandlung
102. en USART Funktionen 16 PDV Vertiefung 11 07 2003 Software Peripherie Bibliothek External LCD Funktionen External CAN 2510 Funktionen Software PC Funktionen Software SPI Funktionen Software UART Funktionen Allgemeine Software Bibliothek Zeichen Klassifizierungs Funktionen Daten Konvertierungs Funktionen Delay Funtkionen Speicher und String Manipulations Funktionen Mathe Bibliothek F r eine genaue Erkl rung wird hier auf das Embedded Control Handbook Volume 2 hingewiesen Des weiteren gibt es eine Erkl rung wie die 32 Bit Floating Point Variablen aufgebaut und konvertiert werden Eine Einf hrung gibt es im Kapitel 5 des MPLAB C 18 Libraries pdf Dokument 3 1 3 Anpassen der Prozessor Spezifischen Bibliotheken f r das PICDEM net Board Nachdem nun herausgefunden wurde dass es eine eigene Bibliothek f r unseren verwendeten Microcontroller gibt und wir nur noch dessen Funktionen benutzen und verstehen m ssen war ein gewisser Optimismus bei uns zu Erkennen welcher auch gleich wieder getr bt werden sollte Es gibt ein wunderbares Tutorial MPLAB C18 Getting Started pdf von Microchip welches eine Einf hrung mit Beispielen f r die Verwendung des C18 Compilers und dessen Peripherie in C und mit der MPLAB IDE v6 xx beschreibt Leider gelten diese Beispiele wieder nicht f r unser erhaltenes PICDEM net Demo Board Es wird das PICDEM 2 Plus Demo Board verwendet Dieses wird auch mit dem Mikrokontroller 181452 betrieben
103. en while XLCDIsBusy XLCDPutString AN1String Te x ANO Eingang Prufen ob sich seid der letzten Wandlung etwas verandert hat Wenn ja dann Daten neu auf LCD schreiben und Diode aufleuchten lassen E if strcmp ANOString oldANO O neuen Wert speichern strcpy oldANO ANOString Diode aufleuchten lassen TREO ADIE REO eg A ERR PORTAGE T M ND E ME DelayXMs 20 PORTA ITE oS M M LENS TEE Store compe e EON Js ANI Eingang Pr fen ob sich seid der letzten Wandlung etwas ver ndert hat Wenn ja dann Daten neu auf LCD schreiben und Diode aufleuchten lassen x55 lt PDV Vertiefung 11 07 2003 A LE stromo ANLSEEL1NG eo GIONE 0 1 neuen Wert speichern Streoy Co ANI ANM S 5 RI Diode aufleuchten lassen TRISADI tS TRISAS 0 7 7 utut EIER DelayXMs 20 EE Ee TREGAS 71 7 7 Inpure je Damit LCD niche flackare 500ms warten DelayXMs 500 EE void convertAD void j aur Bestellung des 10 Bat Wortes 7 WORDEVAESZDEResHul ZEN OL abe eine lose Se e loek 7 ADCONO 0910000001 Analog Digitalwandler initialisieren ADCONT 0b10000000 Das 10 Bit Wort soll von Rechts nach Links geschrieben werden gt Abwarten bis Kontigurearvom geschrieben 7 ADCResult v 0 100 while ADCResult v 0 Konvertierung des AN0 Eingang ADCONObits GO 1 Konvertierung starten while ADCONObits GO Wenn Konvertierung fertig gt
104. en Header der Bibliothek umschreiben denn zu dem XLCD Display geh ren noch weitere spezifische Daten die an dieser Stelle immer noch nicht zur Verf gung stehen wie z B die Anzahl der genauen Zeichen die pro Zeile geschrieben werden k nnen die Pixelbreite eines Zeichens USW Es wird leider noch nicht einmal gesagt welcher Spezielle Typ des LCD Display hier verwendet wird lediglich der Hersteller Hitachi war versteckt in der mitgelieferten Dokumentation zu finden Daher muss noch sehr viel tiefer im MCHPStack nherumgew hlt werden bis alle genauen Daten vorhanden sind Dieses Wissen ist zur Initialisierung des LCD Controllers notwendig 3 2 3 Ergebnis des reverse Engineering Als Fazit f r diesen speziellen Fall kann man folgendes sagen Es hat eine lange Zeit an Internet Recherchen gebraucht bis wir ein Datenblatt genau f r diesen Controller des LCD Display gefunden haben ist auf der CD verf gbar Zudem musste noch die spezifischen Daten aus den Quellcode Dateien des MCHPStacks gesucht werden um am Ende den genauen Typ des LCD Displays feststellen zu k nnen Die ganz genauen Ergebnisse dieser und anderer Untersuchungen kann man im weiteren Verlauf dieses Kapitels sehen Es konnte hier deutlich gemacht werden was die einzige M glichkeit war an die genauen Port und Pinbelegungen heranzukommen Erkennbar war auch dass alle Ports und Pins in der compiler h Datei durch ein define ersetzt wurden Dadurch haben wir sp ter
105. epending on your interrupt usage oy define ENABLE INTERRUPTS INTCON GIEH 1 define DISABLE INTERRUPTS INTCON GIEH 0 Default Address information If not found in data EEPROM KI define MY DEFAULT IP ADDR BYTE1 192 define MY DEFAULT IP ADDR BYTE2 168 define MY DEFAULT IP ADDR BYTE3 0 define MY DEFAULT IP ADDR BYTE4 254 define MY DEFAULT MASK BYTE1 Oxff define MY DEFAULT MASK BYTE2 Oxff define MY DEFAULT MASK BYTE3 Oxf f define MY DEFAULT MASK BYTE4 0x00 define MY DEFAULT GATE BYTE1 MY DEFAULT IP ADDR BYTE1 define MY DEFAULT GATE BYTE2 MY DEFAULT IP ADDR BYTE2 define MY DEFAULT GATE BYTE3 MY DEFAULT IP ADDR BYTE3 define MY DEFAULT GATE BYTE4 MY DEFAULT IP ADDR BYTE4 define MY DEFAULT MAC BYTE1 0x00 define MY DEFAULT MAC BYTE2 0x04 define MY DEFAULT MAC BYTE3 0xa3 define MY DEFAULT MAC BYTE4 0x00 define MY DEFAULT MAC BYTE5 0x00 define MY DEFAULT MAC BYTE6 0x00 define MY MAC BYTEI AppConfig MyMACAddr v 0 define MY MAC BYTE2 AppConfig MyMACAddr v 1 define MY MAC BYTE3 AppConfig MyMACAddr v 2 define MY MAC BYTE4 AppConfig MyMACAddr v 3 define MY MAC BYTES AppConfig MyMACAddr v 4 define MY MAC BYTE6 AppConfig MyMACAddr v 5 Subnet mask for this node Must not be all zero s or else this node will never transmit anything WI define MY MASK BYTE1 AppConfig MyMask v 0 define MY MASK BYTE2 AppConfig MyMask v 1 define M
106. er Konfiguration des ADCON 1 Registers fur die Umwandlung des AN1 Eingangs 58 PDV Vertiefun 11 07 2003 Da wir am Anfang unser Watch Window ge ffnet und eine Variablen sowie Register eingef gt haben k nnen wir uns diese nun anschauen und werden folgendes sehen k nnen EE ll Add SFH ADCONO Add Symbol __parameter_ 1 um E L S UN ADRESL ADRESH 03 ANOString 1023 ANiString rr Watch Watch 2 Watch 3 Watch 4 Folgender Code wurde kurz zuvor ausgef hrt Konvertierung des ANO Eingang ADCONObits GO 1 Konvertierung starten while ADCONObits GO Wenn Konvertierung fertig gt ADONO GO 8 Bit Werte auf ein 16 Bit Bereich schreiben ADCResult v 0 ADRESL ADCResult v 1 ADRESH 10 Bit Wert in ASCII String konvertieren itoa ADCResult Val ANOString Da wir konfiguriert haben dass das LSB des Umwandlungsergebnis an die Stelle des LSB des Registers ADRESL stehen soll kann man erkennen dass in ADRESL 8 niederwerligeren Bits des Ergebnisses stehen Zudem kann man auch das Ergebnis in dem String lesen da es im letzten Schritt in den String geschrieben wird Wenn wir nun die Schritte bis zum Ende der Funktion weitergehen k nnen wir folgende Watch erkennen Add SFH ADCONO Add Symbol __parameter_ 1 m LEES NE ADRESL ADRESH AD H ANOString 1023 Hj ANTString CTIE watch watch 2 watch 3 Watch 4 Man kann hier sehr gut Erkennen dass die Specia
107. er Periode SetDCPWM1 0x00 Setzt den DutyCycle des PWM Moduls Der USART wurde direkt per Registereintrag konfiguriert und auf interruptgesteuerten Empfang eingestellt void USARTINit void lBRIIG1iES E Make USART RX Interrupt High Prio El TXxS TAD EE TXSTADLES o SYNC RESANS es En EE RCSTAbits RX9 EA Baudrate Low Speed select Asynchroner Modus Serial Port Enabled Enable USART RX Interrupt 8 Bit Empfang Enable Receiver pragma interrupt USARTrxISR void USARTrxISR void chasedeafke while PIR1lbits RCIF date EE reac write EE NS Zur Zwischenspeicherung der in der ISR empfangenen Werte dient ein Ringpuffer der in einer Funktion mit statischen Array als Datenbeh lter und jeweils einem statischen Lese und Schreibzeiger realisiert ist unsigned Char reac write EE c unsigned Char rw 2665 PDV Vertiefung 11 07 2003 volatile tatie char purer BUERTSTZE oat er Burrer yolatile static unsigned reac prr 08 volatile static unsigned write ptre 0 MASK USART RX INT if read ptr write ptr Puffer enth lt Zeichen pog Zohan Wesens terre if Teac ptr gt BUFF 17 reac ptr 0 UMASK USART_RX_INT recurn TRUE else i Putter leer UMASK USART RX INT return BAISSE else rw WRITE if rw READ lo de E EE c ted UT Ve D UMASK USART RX INT return TRUE Die ben tigen Routinen zur Ansteuerung des LCD wurden der modifizierte
108. ers und des LCD Displays wird zudem ausf hrlich im Kapitel 4 Ansteuerung der Peripherie beschrieben Das Grunds tzliche Prinzip des main loops ist folgender Ablauf e convertAD o umwandeln des Analogen Wertes an ANO o Schreiben des umgewandelten Wertes in einen String o umwandeln des Analogen Wertes an AN1 o Schreiben des umgewandelten Wertes in einen String e Ausgabe des Ergebnis Strings von ANO auf dem LCD Display e Ausgabe des Ergebnis Strings von AN1 auf dem LCD Display Zudem werden noch Standartbibliotheken wie lt delay h gt und string n genutzt Aber auch die eigene xicd h die von dem MCHPStack bernommen und modifiziert wurde wird hier genutzt Weiter soll aber an dieser Stelle auf diesen Code nicht eingegangen sein da es von programmiertechnischer Seite nicht allzu Aufwendig ist und die Kommentare im Source Code alles sehr genau erkl ren 5 2 4 Programmieren des Microcontroller mit ICD 2 Jetzt kommt eine der Besonderheiten die das Entwickeln f r den Microcontroller sehr vereinfachen Bisher konnte man IC s nur programmieren indem man sie von ihrem Sockel geholt und auf ein Programmierger t gesteckt hat welches an der Parallelen Schnittstelle hing Diese Methodik ist nat rlich f r das IC selber sehr aufwendig und abnutzend Zudem ist die gesamte Prozedur des Programmierens sehr aufwendig und zeitraubend In Kapitel 2 wurde die Hardware beschrieben Unter anderem auch das ICD 2 und seine Vorteile Hier ko
109. ertiefung 11 07 2003 Aber zun chst muss der Port A noch aus Output konfiguriert werden In der Dokumentation des Microcontrollers werden in Kapitel 9 I O Ports alle vorhanden Ports beschrieben F r den Port A gilt als default Einstellung bei einem Power Reset dass die Pins RA5 und RA3 RAO liest sich RA3 bis RAO als analoge Inputs konfiguriert sind Die Pins RA6 und RA4 sind als digitale Inputs konfiguriert Da wir allerdings die Pins RA3 und RA2 als digitale Output benutzen mochten m ssen wir das Data Direction Register TRISA auf 0 setzen Die Portpins an denen die Dioden angeschlossen sind k nnen nun mit folgender Struktur angesprochen werden DDRAbits RA2 DDRAbits RA3 uc s Fein d Die Dioden besitzen eine negative Logik was bedeutet dass sie bei einer 0 an bzw einer 1 ausgeschaltet werden Da der gesamte Code f r dieses Programm nur sehr gering ist wird dieser hier aufgelistet include lt pl8cxxx h gt include lt delays h gt void main void PORT A als Output konfigurieren Default ist RAD und RA3 RAO digital input und read AA TRESA QUT CONES Ute Dre zwei LEDs h ngen an dem Port A gt Bre 2 amp 3 LEDs initialisieren gt inverse Logig gt OxFF Ts DBD gt Son 2 DED gt a s DDRAbits RA2 DDRAbits RA3 0s an Lle A als while 1 Anliegenden Wert an LEDs invertieren DBRS cs DIR losin Re E Wartet ein vielfaches von 10000 ProzessorZyklen Dela
110. eway WORD VAL SerialNumber IP ADDR SMTPServerAddr Not used struct unsigned int bIsDHCPEnabled 1 Flags APP_CONFIG typedef union STACK FLAGS struct unsigned int bInConfigMode 1 bits BYTE Val STACK FLAGS ifndef THIS IS STACK APPLICATION extern APP CONFIG AppConfig tendif if defined STACK USE IP GLEANING defined STACK USE DHCP ifndef STACK INCLUDE extern STACK FLAGS stackFlags endif endif if defined STACK_ USE IP GLEANING defined STACK USE DHCP define StackIsInConfigMode stackFlags bits bInConfigMode else define StackIsInConfigMode FALSE endif BOK KK KK AK I A KKK kkk KK kK Kk kkk kK A A A k k kK Kk k AA I k k k I Hk k k Function void StackInit void PreCondition None Input None Output Stack and its componentns are initialized 83 PDV Vertiefung 11 07 2003 Side Effects None Note This function must be called before any of the stack or its component routines be used FA A Ck Ckckckck kk ckckckck kckckckckck ck kck ck ck ck kckck ck ck kckckck ck ck kckckck ck ck kokck ck ck kckokck ck ck kokokck kc I A void StackInit void BOK KK KK RA Ck kk KKK Ck kk kk Ck kk Ck Ck Ck Sk kk kk Ck kc kck kc k ck ck ckckckckckckckck ck ck kokckck ck I k k k Function void StackTask void PreCondition StackInit is already called Input None Output Stac
111. fett gedruckten Zeilen f hren zur Initialisierung der Hardware die f r die Anwendung genutzt werden soll Ein Ausschnitt aus der Funktion InitializeBoard zeigt nun folgendes stace on doen ver Setup for PORTA RAO as analog input while rests as digircal i o lines m ADCON1 0910001110 RAO as analog input Right Just tried TRISA 0x03 enabled using RA5 3 Disable LCD cher TEDS data EEPROM needs pull ups so enable internal EE ERUR I XLCDInit XLCDGoto 0 0 XLCDPutROMString StartupMsg TXSTA 0500100000 Low BRG speed TS US 051200700007 SPBRG SPBRG VAL TOCON INTCON GIEH EE ER 19 PDV Vertiefung 11 07 2003 Hier ist erkennbar fett gedruckt dass das LCD Display initialisiert wird der Funktionsname ist in dem Fall selbsterkl rend Weiter kann man auch noch andere Funktionen erkennen die auch selbsterkl rend sind Da nun diese Funktionen einfach aufgerufen worden sind m ssen sie bekannt sein Wenn man nun an den Anfang der websrvr c Datei geht und danach sucht wird man den entsprechenden Header Eintrag finden E Eer EE EE Ee Ein wenig weiter unten findet man auch noch die statische Nachricht die einem auf das LCD Display bei dem Start der Anwendung geschrieben wird Nat rlich ist der n chste Schritt die xlcd h Datei gewesen und wenn man sich diese Anschaut wird man unter anderem folgenden Auszug finden DATA PORT defines the port to which the LCD
112. fine STACK USE TCP fendif fendif When FTP is enabled TCP must be enabled xf if defined STACK USE FTP SERVER if defined STACK USE TCP define STACK USE TCP fendif fendif if defined STACK USE FTP SERVER define STACK CLIENT MODE tendif 80 PDV Vertiefung 11 07 2003 When DHCP is enabled UDP must also be enabled if defined STACK USE DHCP if defined STACK USE UDP define STACK USE UDP fendif fendif When IP Gleaning is enabled ICMP must also be enabled ui if defined STACK USE IP GLEANING if defined STACK USE ICMP define STACK USE ICMP fendif fendif DHCP requires unfragmented packet size of at least 328 bytes and while in SLIP mode our maximum packet size is less than 255 Hence disallow DHCP module while SLIP is in use If required one can use DHCP while SLIP is in use by modifying C18 linker scipt file such that C18 compiler can allocate a static array larger than 255 bytes Due to very specific application that would require this sample stack does not provide such facility Interested users must do this on their own dif defined STACK USE SLIP dif defined STACK USE DHCP error DHCP cannot be used when SLIP is enabled endif endif Modify following macros d
113. h by Microchip Technology Incorporated the Company for its PICmicro Microcontroller is intended and supplied to you the Company s customer for use solely and exclusively on Microchip PICmicro Microcontroller products The software is owned by the Company and or its supplier and is protected under applicable copyright laws All rights are reserved Any use in violation of the foregoing restrictions may subject the user to criminal sanctions under applicable laws as well as to civil liability for the breach of the terms and conditions of this license THIS SOFTWARE IS PROVIDED IN AN AS IS CONDITION NO WARRANTIES WHETHER EXPRESS IMPLIED OR STATUTORY INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE THE COMPANY SHALL NOT IN ANY CIRCUMSTANCES BE LIABLE FOR SPECIAL INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON WHATSOEVER F 0E 0X F X FF F F FF X o X FF xo X X OF OF Author Date Comment NA Nilesh Rajbharti 5 8 02 Original Rev 1 0 Nilesh Rajbharti 7 10 02 Improved OKCKCKCk kokckck ck ck ck kck kk ck k kc kc k Ck kckckck ck ck kckck ck ck k kckck kc k k k kc kc k ck kckckck ck ck kckokck ck ck kokckck ck ck kokck kk f ifndef XLCD H define XLCD H 101 PDV Vertiefung 11 07 2003 XLCD peripheral routines Notes
114. hr viel im Bereich Microcontroller und der Entwicklung von Anwendungen in diesem Bereich gelernt Allerdings haben wir auch Bemerkt wie wichtig doch Dokumentationen sind und wie man doch ohne diese Aufgeschmissen ist Dennoch war das gesamte Projekt eine sehr gute Erfahrung und hatte viele interessante Themen zu bieten 71 PDV Vertiefung 11 07 2003 Anhang 6 5 Datenblatter Quellen Wenn spezielle Informationen oder Daten angegeben worden sind dann kann man sie in den folgenden Datenbl tter oder URLs nachlesen und finden PIC18Fxx2 Data Sheet pdf MPLAB net Demonstartion Kit Errata Sheet pdf MPLAB net InternetEthernet Demo Board Internet Solutions pdf MPLAB IDE v6 xx Quick Start Guide pdf MPLAB ICD 2 User Guide pdf MPLAB C18 Getting Started pdf MPLAB C18 Libraries pdf MPLAB C18 Users Guide pdf MPLAB CXX Compiler User s Guide pdf PIC18Fxxx comprehensive tutorial containing 7Mb of info pdf HITACHI LCD Display HD44780 Data Sheet pdf IC ALEGRO SA3968A HBruecke pdf IC UND Gatter 74LS08 pdf Alle Datenbl tter sind auf der CD im Ordner pdf zu finden Zus tzlich wurde als Quelle das Internet mit folgenden URLs benutzt www microchip com www mircochipc com www microchip com 1010 pline tools picmicro devenv mplabi mplab6 index htm www microchip com 1010 pline tools picmicro code mplab18 www microchip com 1010 pline tools picmicro icds icd2 www google de 6 6 Ordnerstruktur der CD Inhat
115. ibung kann man der MPLAB C18 Libraries pdf Dokumentation entnhemen Im eigenen Source Code m ssen nat rlich die entsprechenden Header Files includiert werden damit die Prototypen der Bibliotheks Funktionen bekannt sind F r die Einbindung der spezifischen Mikroprozessorbibliothek reicht der folgende include include lt pl8cxxx h gt Dadurch dass man den genauen Mikroprozessortyp in der Projektumgebung angegeben hat wird die richtige Bibliothek automatisch bei dem kompilieren dazu gelinkt Man kann aber auch gleich den richtigen Mikroprozessor angeben das macht keinen Unterschied include p18f452 h Die allgemeine Variante ist Sinnvoll wenn auf dem gleichen Board einen anderen Mikroprozessor benutzen m chte Dadurch muss man nicht mehr im gesamten Code sondern nur in der Projektumgebung einmal den Mikroprozessortyp ndern 3 1 2 Auflistung der unterst tzten Bibliothek Routinen Eine genaue Auflistung aller Funktionen deren Parameter und R ckgabewerte werden ausf hrlich in der mitgelieferten Dokumentation des C18 Compilers beschrieben MPLAB C18 Libraries pdf Hier ist nur eine bersichtliche Auflistung aller Funktionsgruppen Man kann so schnell einen Eindruck ber die implementierten Funktionen gewinnen Hardware Peripherie Funktionen A D Converter Funktionen Input Capture Funktionen CC Funktionen I O Ports Funktionen Microwire Funktionen Pulsweiten Modulation Funktionen SPI Funktionen Timer Funktion
116. ichtungschalter FORWARD gt 1 Masken fuer LCR define BRKST 0x40 define RDONLY 1 define WRONLY 2 define RDWR 3 Errorcodes define NOERROR 0 define EINVALSTCT 1 define EINVALDC 2 define ENORDONLY 3 define ENOWRONLY 4 define ENORDWR 5 define EINVALRDWR 6 define EXPWM 7 OR KK KK KI A I AA I KK kK kK AA I k k k k k A ck ckckckckckckckckck ck kokckck ck I k k k Typdefineitionen eR eA A 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 22 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2207 Aus PDV bekannte XDATA Struktur um einen Remotezugriff auf eine virtuelle RS232 Schnittstelle zu realisieren Wird aus Kompatibilitaetsgruenden zu alten Aufgaben implementiert Siehe ProcessXDATA in motor server tuer Details E um typedef struct XDATA WORD rdwr 13 PDV Vertiefung 11 07 2003 WORD port WORD value DWORD t0 WORD status XDATA Control Data Struktur erlaubt Remotezugriff auf die Register die PWM relevanten Register des PIC18F452 Di rsten zwei Bit des von direction m ssen 1 sein um die CDATA Struct als solche zu kennzeichnen direction kann folgende Werte annehmen 0 gt Break gt Rechtsdrehung Linksdrehung gt Disable Wertebereich von 0x000 Ox3FF in speed val wird die aktuelle Geschwindigkeit in U min zur ckgeliefert UU UU UU UU DOP
117. ide LEDs k nnen durch einen Jumper deaktiviert werden Position 6a PDV Vertiefun 11 07 2003 BENUTZERDEFINIERTER PUSH BUTTON Dieser Schalter ist mit einem Digitalen Eingang des Controller verbunden BENUTZERDEFINIERTE POTENTIOMETER Zwei 10 kOhm Potentiometer die mit 2 analogen Eing ngen des Controller verbunden sind Die Bezeichnungen ANO und AN1 sind auf der Platine vertauscht RESET PUSH BUTON Dieser Schalter ist fest mit dem MCLR Pin des Controller verbunden RJ 45 10 Base T DOSE Port f r die Standart Ethernet Verbindung RJ 11 SIX WIRE DOSE Dieser Port erm glicht es mit dem MPLAB ICD System zu arbeiten welches das onboard programmieren des EEPROMS erlaubt Zus tzlich l sst sich damit auch debuggen RS 232 PORT Erm glicht eine Verbindung ber die Serielle Schnittstelle PROTOTYP BEREICH Ein 24x27 breites Lochfeld welches f r eigene Schaltungen und Erweiterungen zur Verf gung steht Es gibt eine Spannungsversorgung von 5 VDC und es k nnen verschieden Ports des Controllers angesprochen werden RA lt 5 0 gt RB lt 4 0 gt RC lt 7 0 gt und RD lt 7 0 gt ETHERNET ID Diese einmalige Seriennummer repr sentiert die letzten beiden Bytes der vorprogrammierten Media Access Control Nummer MAC Adresse Der MPLAB ICD 2 ist ein preisg nstiger Echtzeit Debugger und Programmierer f r ausgew hlte PICmicro Microcontroller P ap CN Grunds tzlich kann man zwei gro e Vorteile cent Debugger RM diesem
118. ie Konfiguration des genauen LCD Display Typs Es soll auf 4 Bit Interface 5x8 Pixel Zeichengr e und 2 Zeilen konfiguriert werden Folgende Datenworttabelle zeigt alle M glichkeiten der Datenw rterkombinationen 28 PDV Vertiefun 11 07 2003 Gen elle e elei mim mmm ycles on been E Clear Display DIESES EIKE Clear display amp set address counter to zero EM set adress counter to zero return shifted Cursor Home display to ariginal position DD RAM contents remains unchanged Entry Made set cursor move direction lU Dn and specify Set automatic display shift 3 Display n n n n Turn display OD cursor onioff C and Gontrol lolo o o o e 1 D E E cursor Blinking B Cursor n n Sn shift display or move cursor S C and um E P n set interface data width DL number of set CGRAM DARD Z Si Set CGRAM address CGRAM data is sent Address ojololt CGRAM Address afterwards Se AT E AM addre A4 cd is ee Set DDRAM late DDRAM Address Set DDRAM address DDRAM data is sent Address afterwards Busy Flag amp BL Address Counter Read busy flag BF and address counter Address x Don t care Increment Gu 1 Shift to the right t Decrement Shift to the left Automatic display shift DL 1 8 bit interface 0 4 bit interface Display ON M 1 2 lines Display OFF 1 line Cursor ON F 1 5x10 dots Cursor OFF 5x dots utr Cursor blinking DORAM Display Data RAM se E Display shift CGRAM Character Generator RA
119. ied Left Justified Bild 16 A D Wandler Formatierung in den ADRESH und ADRESL Registern Anhand der Grafik sollte erkennbar sein dass man selbst entscheiden kann wie man das Ergebnis in den Registern formatiert haben m chte 4 5 3 Ansteuerung in C Nachdem nun die Register ausf hrlich erkl rt sind sollte die Ansteuerung nun kein gro es Problem mehr darstellen Allerdings gibt es ein paar Kleinigkeiten die man doch erw hnen sollte da diese wenn man sie nicht beachtet zu unerw nschten und nicht erkl rbaren Auswirkungen f hren Folgende Angaben werden beachtet 40 PDV Vertiefung 11 07 2003 e ANO soll genutzt werden e Fosc 32 Clock e Das Ergebnis soll das LSB im LSB des ADRESL Registers haben Zur Vereinfachung des Bearbeitens von dem 10 Bit Ergebnis wurde folgender Datentyp eingef hrt Datentypen festlegen typedef unsigned char BYTE 44 Sloe s typedef unsigned short int WORD EE Un eim EE EE EE EE schreiben zu konnen typedef union WORD VAL WORD Val BYTE y2 WORD VAL Falls manch einem nicht ganz klar ist weshalb dies eine Vereinfachung sein sollte hier ein kleiner Exkurs in C UNION Mit dem Schl sselwort UNION legt man fest dass sich mehrere Variablen den gleichen Speicherplatz teilen In unserem konkreten Fall wurde erst eine 16 Bit Variable woRD vai und dann ein Array BYTE v 2 von jeweils 8 Bit angelegt Das hat den Vorteil dass man in 2 Schritten die jeweiligen 8 Bit Ergebnisse schr
120. itions of this license THIS SOFTWARE IS PROVIDED IN AN AS IS CONDITION NO WARRANTIES WHETHER EXPRESS IMPLIED OR STATUTORY INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE THE COMPANY SHALL NOT IN ANY CIRCUMSTANCES BE LIABLE FOR SPECIAL INCIDENTAL OR F 0b 0X 0X F 0E FF 0 0x ob oo Xx X X 0o X oo X xo ox F ox OF 86 PDV Vertiefung 11 07 2003 CONSEQUENTIAL DAMAGES FOR ANY REASON WHATSOEVER HiTech PICC18 Compiler Options excluding device selection FAKELOCAL G 0 Zg E C Author Date Comment DOPOD el Se SE e ESRD PG PPG IS PEAS PGS BE br el SE ALD IS DADE RD PIN ING ERIGI PRIMIS FIELD UIN PEAS POG YS Nilesh Rajbharti 4 19 01 Original Rev 1 0 Nilesh Rajbharti 2 09 02 Cleanup Nilesh Rajbharti 5 22 02 Rev 2 0 See version log for detail Nilesh Rajbharti 7 9 02 Rev 2 1 See version log for detail bake BOK RK KK KA I KK kK kkk KK kK kk kkk kk k k kk kkk kk k k A k k kk kkk k k k k k k ok Prozessdatenverabeitung Vertiefung Ansteurung eines Motors ber UDP mit Hilfe des PICDEM net Demoboards und dem Microchip TCP IP Stack
121. k Ck KC kk Ck Ck Kk Ck Kk Ck ck kk kk kk ck k ck ck k ck ck ck k ck ckck kc kk ck 2 Prozessdatenverabeitung Vertiefung i Ansteurung eines Motors ber UDP mit Hilfe des PICDEM net S Demoboards und dem USART x Markus K hle i Marco Kosinski 534931 KKEKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK X defines h HK kCkck kk 2 2 2 kckck kc k ck k ck ck ck ck ck ck kk k ck kc 2 2 2 2 k ck k kc k ck kc kc kck kc k ck k kc k ck kc 2 2 2 2 2 2 2 2 2 22 22 2207 ifndef DEFINES H define DEFINES H KKK KKK KK KR kk Ck kk Ck KK KK KK Ck kk kk kk kk kk ck k ck kckck ck ck k ck ck k ck ck ck k ck ckck kc kk X m Headerdateien HK OK kCkck kk kk kk kk kc k ck kc k ck ck kc k ck ck kck ck k ck ck ck kc k ck k ck ck ck kc kckck kc k ck k ck ck ck ck ck ckck ck ck kk kk kk kk d include lt pl8cxxx h gt pl8cxxx h must have current processor defined include lt stdlib h gt KKK KKK KK KR KK KK KK KK KK KK I Ck Kk Ck KC k KH HK HH KK ck ck ck k ck ckck kc KK Befinitionen HK KK I kck kk k ck kc kck ck kck ck kc kc k ck HK HH kc k ck kc k ck k kc k ck kc kckck kc k ck k HK kckck ck KK KK KK kck kk d Define f r C18 Compiler define MC
122. k FSM is executed Side Effects None Note This FSM checks for new incoming packets i and routes it to appropriate stack components It also performs timed operations This function must be called periodically called xX to make sure that timely response HR EEE 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2252 2 207 void StackTask void endif 6 7 4 decoder h tt d Prozessdatenverabeitung Vertiefung Ansteurung eines Motors ber UDP mit Hilfe des PICDEM net 5 Demoboards und dem Microchip TCP IP Stack pd di dir dir di di dir dir di dio di dio dio dio dir dir dio dio dir dir dio dio di dio dio dio di di di dio di KH HK AK di KH dio dio di di AK A di AK di A A FH IK A di FH AK A A dio dio A A dio di A A di do A di diro Markus K hle A Marco Kosinski 534931 KAKEKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK decoder h eR EEE 2 2 A 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 07 ifndef DECODER H define DECODER H BORK KK KK HH HH kk kk kkk kK k k kk kk kk k kk ck ck kokckck ck KH k I k k Funktionsdeklarationen eR A A 2 2 2 2 22 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 07 void DecoderlInit void endif OD de
123. l Function Register ADRESL und ADRESH immer nur die Werte der letzten Umwandlung halten Das bedeutet wenn wir uns den Wert des ANO Eingangs nicht in dem String zur Ausgabe gespeichert h tten w re dieser hier verloren gewesen 59 PDV Vertiefung 11 07 2003 5 3 Zeichen ber serielle Schnittstelle und Anzeige auf LCD In diesem Projekt werden von einem Terminal Programm Zeichen geschrieben und auf dem LCD Display ausgegeben Hier wird ausf hrlich die Serielle Schnittstelle Interrupts sowie das LCD Display beschrieben Das Projekt befindet sich im Ordner Projekte 5 4 Timer Interrupts und Serielle Schnittstelle Interrupt Hier werden ausf hrlich Interrupts beschrieben was allerdings schon in der Ansteuerung der Peripherie auch noch einmal getan wurde Somit steht hier auch keine Quelltext sondern nur der Verweis auf dies Projekt im Ordner Projekte 60 PDV Vertiefung 11 07 2003 6 Projektaufgabe und Durchf hrung 6 1 Einf hrung in das Projekt 6 1 1 Aufgabenstellung Die Aufgabenstellung lautete auf der Homepage von Prof Dr Linn wie folgt Die Motivation die uns dazu gef hrt hat Anhand dieser Aufgabenstellung uns f r diese Projekt zu entscheiden war dass wir ein Objekt in diesem Fall ein Motor anhand eines Microcontroller ber das Internet steuern sollten Bisher hatten wir nur mit nahen Objekten zu tun die also eine direkte Verbindung zu ihrem Controller oder Rechner haben Es war daher also recht
124. lches Ger t einen Interrupt ausgel st hat werden durch den Zugriff auf zehn Register realisiert e Interrupt Control Register 1 INTCON Interrupt Control Register 2 INTCON2 Interrupt Control Register 3 uINTCON3 Peripherial Interrupt Request Register 1 PIR1 Peripherial Interrupt Request Register 2 PIR2 Peripherial Interrupt Enable Register 1 PIE1 Peripherial Interrupt Enable Register 2 PIR2 Peripherial Interrupt Priority Register 1 IPR1 Peripherial Interrupt Priority Register 1 IPR2 Reset Control Register RCON Auf die einzelnen Registertabellen soll an dieser Stelle nicht eingegangen werden da es sonst den Rahmen sprengen wurde Allerdings konnen diese auch im PIC18Fxx2 Manual das auf der CD im Verzeichnis pdf zu finden ist eingesehen werden 4 6 2 Implementieren einer Interrupt Service Routine in C Wird ein Interrupt ausgelost muss die Quelle des Interrupts von der Software ermittelt werden denn die Hardware unterscheidet nur zwischen High und Low Priority Interrupts Entsprechend existieren auch nur zwei Adressen im Programmspeicher von wo aus eine Funktion aufgerufen wird An der Adresse 0x0008 sitzt der High Priority Vector und an der Adresse 0x0018 sitzt der Low Priority Vector An diesen stellen muss nun eine Funktion gespeichert werden die dann die jeweilige ISR aufruft Dies bewerkstelligt man mit dem Pragma code pragma code high vector 0x08 void interrupt at high vector voici if INTCONbits INTOIF 1
125. lle vom Client aus zu haben Zus tzlich wurden Fehlermeldungen definiert die wenn sie auftreten an den Client zur ckgesendet und dort ausgegeben werden 70 PDV Vertiefung 11 07 2003 Hier sollte noch erw hnt sein dass nur die CDATA Struktur ausf hrlich getestet wurde Theoretisch m ssten die beiden anderen Strukturen auch funktionieren jedoch wurden sie nicht in der Praxis getestet Die folgende Grafik zeigt das User Interface mit welchem man den Motor steuern kann Es ist m glich periodisch zu senden wenn man das entsprechende H ckchen in der Checkbox setzt Zudem werden alle Informationen die M glich sind Sendebericht Fehlermeldungen in der Listbox ausgegeben Lokale Daten lel Daten Rechnemame rechner IF 192 168 1 32 IF 132 158 1 44 Port 4000 Steuerungs Daten Ce Rechts Motorleistung 34 Prozent C Links Break Al C Disable D Fenodisches Senden enden periodisch Senden 1000 ms Interfall I uil Der Sourcecode mt der gesamten Projektumgebung befindet sich auf der CD im Ordner Projekte Motorsteuerung via Ethernet Somit k nnen Erweiterungen oder nderungen Problemlos eingef gt und der Microcontroller neu programmiert werden 6 4 Fazit Wir wollen hier nur noch ein kurzes Fazit ber das Projekt geben Insgesamt sind wir doch sehr gl cklich dar ber dass wir es vielleicht nicht in Perfektion geschafft haben den Motor via Ethernet zu steuern Zudem haben wir se
126. lobal seine Einstellungen wie Header Files Bibliotheks oder Linker Verzeichniss merkt Sobald man nun also ein neues Projekt erstellt muss man die gesamte Prozedur der Einstellungen wiederholen Ein Nachteil hat dies auch bei Projekten die dann auf einem anderen Rechner weiterentwickelt werden soll denn die ganzen Pfade werden sich f r das Projekt auf der Maschine gemerkt wo es erstellt wurde M chte man also das Projekt auf einem anderen Rechner weiterentwickeln m ssen erst alle Einstellungen ge ndert werden was sehr m hsam ist Eine Verbesserung w re also sich das auf Programmebene und nicht auf Projektebene zu merken Aber da es ja viele M glichkeiten z B in der Programmiersprache gibt wird das wohl auch irgendwo einen Sinn haben dass alles im Projekt lokal gespeichert wird Nun sind die Rahmenbedingungen f r das Projekt erstellt und eingerichtet so dass man nun zum eigentlichen Projekt und dem programmieren kommt 5 2 3 Source Code Wenn man nun durch Men File New sich eine neue Datei erstellt und diese dann abspeichert ist sie leider noch nicht im Projekt integriert Man muss manuell seine Files dem Projekt hinzuf gen Rechte Maustaste im Projekt bersichtsfenster Erst dann geh ren sie offiziell dem Projekt an und werden beim kompilieren und verlinken beachtet Der eigentliche Source Code kann auf der CD im Ordner Projekte gefunden werden Hier wird jetzt nur die Datei main c aufgelistet da sie das ganze Herzst
127. lt 0 Auswirkung Synchroner Modus 0 Asynchroner Modus Unbenutzt Wird als 0 gelesen BRGH High Baud Rate Select Bit RW Default 0 Im Asynchronen Modus Auswirkung Hohe Baud Rate Niedrige Baud Rate 34 PDV Vertiefun 11 07 2003 Im Synchronen Modus Keine Auswirkungen Transmit Shift Reg Status Bit R Default 1 Bit Auswirkung 1 TSR ist leer TSR ist voll I TX9D Bit 9 der Transmit Daten RW Default 0 Stelle Bedeutung T SPEN Serial Port Enable Bit RW Default 0 1 Master Modus Takt wird vom internen Baud Rate Generator generiert 0 Slave Modus Takt kommt aus externer Quelle 6 RX9 9 bit Recelve Enable Bit RW Default 0 Es werden immer 9 Bit empfangen 0 Es werden immer 8 Bit empfangen Single Receive Enable Bit RW Default 0 Im Asynchchronen Modus Keine Auswirkungen Im Synchronen Modus Master Bit Auswirkung Bit Nach Empfang wird Bit zur ckgesetzt Im Synchronen Modus Slave Keine Auswirkungen Continous Receive Enable Bit RW Default 0 Im Asynchronen Modus Receiver wird eingeschaltet 0 Receiver wird ausgeschaltet Im Synchronen Modus USART nimmt Pakete an bis CREN zur ck gesetzt wird berschreibt SREN USART nimmt keine Pakete an SE PDV Vertiefun 11 07 2003 ADDEN Address Detect Enable Bit RW Default 0 FERR Framing Error Bit R Default 0 Eig Semen ERE EP a SPEN RX9 SREN CREN ADDEN FERR OERR RX9D __ ne
128. m darstellte als man sich vorher gedacht hat Das erhaltene PICDEM net Board hat die besondere Eigenschaft einen embedded Webserver zu erm glichen Ein RJ 45 Anschluss ist verf gbar um das Board an das Ethernet anzuschlie en Eine frei verf gbarer mitgelieferter TCT IP Stack kann f r eigene Zwecke verwendet werden Zudem ist eine Testsoftware die schon vorinstalliert ist verf gbar um alle Feinheiten des Boards zu testen Die Anwendung f r das Board bezieht sich nun nicht mehr ausschlie lich dem Ansprechen durch eigens daf r geschriebene Software einzelner Peripherie sondern diese k nnen nun auch ber eine Webseite angesprochen werden die direkt auf dem Board gespeichert wird oder ber ein eigenes Protokoll welches ber Ethernet l uft PDV Vertiefung 11 07 2003 2 Getting Started Das erhaltene Board hat die Testsoftware schon vorinstalliert Als erstes wollen wir versuchen einfach nur ber das Netzwerk auf die Webseite zuzugreifen Da Default m ig die Ethernet Konfiguration auf DHCP eingestellt ist und wir aber eine statische IP vergeben wollen ist die erste Ber hrung mit dem Board die Konfiguration der IP Das Board kann man ber die serielle Schnittstelle mit einem Nullmodem Kabel dem installierten Konfigurationsmen und einem Terminal Programm konfigurieren In dem mitgeliefertem Einf hrungsmanual werden die Einstellungen des Hyper Terminals von Windows sowie die ganzen mitgelieferten Teile sehr gut erkl rt
129. mer initialisieren der nach jedem berlauf einen Interrupt ausl st Dessen ISR liest den Wert des Z hlers und verrechnet ihn mit einer Konstanten um die U min zu bestimmen Ist die Drehung des Motors zu diesem Zeitpunkt eine Rechtsdrehung so wird dem Wert ein vorangestellt Danach wird der Z hler wieder auf 0 zur ckgesetzt Zeitkonstante zur Berechnung der Drehgeschwindigkeit in U min T 0 0000002 s Tose 16 MROPrse 655361 Ee rer jy 512 ES Iss ADT ME ne pA sse Eeler 1024frticks u const Couble IMRUPerdod 1 78956970666666727 terc somnis pragma interrupt TimerOISR void slime OMS 190 Os cl speed long double tick counter TMROPeriod ticks ticks min U U min Ee speed speed tick Counter 0 EE EE O Somit lie sich nun die Drehgeschwindigkeit recht genau ermitteln und auf dem LCD Display auszugeben Immerhin ist es nun M glich trotz aller Dokumentations und Anfangsschwierigkeiten den Motor im Zusammenspiel mit Microcontroller und einer externen Schaltung ber die serielle Schnittstelle zu steuern Um eine Verbindung mit dem Hyperterminal zu dem Microcontroller herzustellen gelten die gleichen Einstellungen f r das Hyperterminal wie im Kapitel 1 Getting Started beschrieben Dieser Stand wurde auch in der Vorlesung pr sentiert und die Ansteuerung per Ethernet war in Arbeit 6 3 2 Motoransteuerung per Ethernet Als n chstes stand auf dem Plan dem Motor be
130. mer2 TIMER INT OFF amp T2 PS 1 16 amp T2 POST 1 1 PWM Prescaler OpenPWM1 OxFF SetDCPWM1 0x00 Daten der virtuellen RS232 Schnittstelle initialisieren cts 32 90 Phasenverschoben zu dsr dsr 0 ddsr 0 dcts 0 Ausgangspins konfigurieren TRISCbits TRISCO 0 Laufrichtung Rechts TRISCbits TRISCI 0 Laufriehtung Links TRISCbits TRISC2 0 PWM Ausgang 0 0 TRISAbits TRISA2 0 IF LED Links TRISAbits TRISA3 0 LED Rechts Laufrichtung Links vorkonfigurieren LATCbits LATCO 0 LATCbits LATCI 1 LATAbits LATA2 0 Leuchtet bei 0 LATAbits LATA3 1 Leuchter bei 0 Enable all Interrupts INTCONbits GIEH 1 INTCONbits GIEL 1 void MotorServerShutdown void ClosePWM 1 CloseTimerO CloseTimer2 Funktion ueberprueft ob UDP Packet empfangen wurde checkt welches Packet empfangen wurde und gibt die Daten an die entsprechende Funktion weiter void MotorServer void static UDP SOCKET ListenSoc INVALID UDP SOCKET const UDP PORT ListenPort 4000 EDATA errorframe BYTE buffer CHAR MAX BYTE in pointer 0 BYTE out pointer D WORD VAL dataid BYTE error NOERROR if ListenSoc INVALID UDP SOCKET ListenSoc UDPOpen ListenPort NULL 0 Falls UDP PAcket empfangen wurde if UDPIsGetReady ListenSoc
131. mit diese beiden IC s eine RS 232 Buchse f r den Motor und eine zus tzliche Spannungsversorgung f r den Motor installiert Die RS 232 Buchse hat folgende Belegung ND Amplituden Sensor 2 Channel B an RBO OOGO 3 Amplituden Sensor 1 Channel A an RB1 3 6 Spannungsversorgung Motor Out B 65 i T zm Pen PDV Vertiefung 11 07 2003 Durch dieses einfache Steckverfahren kann man den Motor oder die Spannungsversorgung nicht verkehrt anschlie en Da hier auch nur IC s verwendet werden ist auch dessen Auswechselung sehr einfach 6 3 Realisierung Software 6 3 1 Ansteuerung des Motors ber die serielle Schnittstelle Zur Mitte des Projektes war es nicht sicher ob wir das Ziel der Ansteuerung ber Ethernet erreichen w rden Daher hatten wir als mittelfristiges Ziel den Motor per serielle Schnittstelle anzusteuern Die Idee war ein einfaches Terminalprogramm wie Hyperterminal zu nutzen um Befehle an den Chip zu schicken Um zu berpr fen was am Chip ankommt sollte eine Ausgabe auf dem LCD und den UserLEDs erfolgen Der Motor selbst wurde indirekt ber die H Br cke mit dem chipinternen PWM Modul gesteuert welche im Kapitel zuvor erl utert wurde Um die Drehrichtung zu bestimmen wurden die Pins O und 1 des Digitalen l O Ports C als Ausg nge konfiguriert Das PWM Modul wurde mit den Bibliotheksfunktionen des C18 Compilers gesteuert OpenPWM1 OxFF Initialisiert PWM mit ein
132. mmen diese Vorteile jetzt zum tragen Das ICD 2 lasst sich ber USB oder der seriellen Schnittstelle von Rechner aus ansteuern und ist mit dem PICDEM net Board verbunden 54 PDV Vertiefun 11 07 2003 wm i s Cd EE KAS e AW KEEWAW BUS ri a DH T gt F PEST A M a Bild 18 ICD2 verbunden mit dem PICDEM net Demo Board und Laptop rer Auf dem Bild kann man recht gut erkennen wie die gesamte Hardware miteinander verbunden aussieht Wenn das ICD 2 ordnungsgem installiert ist sollte nach dem Ausw hlen des Programmierger ts in der MPLAP IDE eine Connect Meldung in der Output Box erscheinen Debugger Programmer Configure Window Help Select Programmer w Mone SET DI PICSTART Plus E jol xj AS E e D PRO MATE II Bild 19 Ausw hlen des Programmierger ts Falls sich an dieser Stelle Schwierigkeiten ergeben kann dies mehrere Gr nde haben die wir ber die Zeit herausbekommen haben e CD 2 USB Treiber wurde nicht richtig installiert Eine Genaue Anleitung gibt es direkt nach der Installation der MPLAB IDE e Es wird nicht die neueste Version der MPLAB IDE verwendet Im Moment Version 6 20 Vorherige Versionen haben Probleme mit USB 2 0 e Die MPLAB IDE ist schon gestartet und das USB Kabel des ICD 2 wurde erst nachtr glich eingesteckt Das Ger t wird so oft nicht erkannt Man muss hierbei die IDE noch einmal schlie en und die ICD 2 USB Stecker erneut stecken Erst dann wieder die IDE starte
133. n Wenn nun die ICD 2 korrekt erkannt wurde kann der Microcontroller programmiert werden Men Programmmer gt Program 55 PDV Vertiefung 11 07 2003 Folgende Meldung wird bei einer korrekten Programmierung im Output Fenster ausgegeben Build Find in Files MPLAB ICD 2 Fassed MFLAB ICD 2 Ready Programming Target Eras ng Part BProgramming Program Memory BProgramming Configuration Bits Verifving Frogram Memory Werify Succeeded Contig Memory Frogramming succeeded HPLAB ICD 2 Ready Bild 20 Programmieren des Microcontrollers durch ICD 2 Wenn das Programmieren abgeschlossen ist kann das Kabel von ICD 2 zu dem PICDE net Demo Board abgezogen werden und die Anwendung startet Manchmal gibt die Anwendung an dieser Stelle nur nicht definierbares aus In diesem Falle ist ein Hardware Reset notwendig was soviel bedeutet wie die Stromversorgung kurz unterbrechen In dem Fall dass alles korrekt programmiert wurde sollte die Anwendung nun einwandfrei laufen wie es folgende Bilder zeigen 5 2 5 In Circuit Debuggen mit dem ICD 2 Nun kommen wir zum absoluten Highlight des ICD 2 Es ist m glich zur Laufzeit Register auszulesen oder das Programm an bestimmte durch Breakpoints definierte Stellen anzuhalten und Schritt oder Zeilenweise vorw rts zu gehen Diese Methodik ist sehr effektiv und ohne diese Debugmoglichkeit w ren einige Untersuchungen noch viel aufwendiger gewesen
134. n Bibliothek des Microchip TCP IP Stack Beispielprogramm entnommen wie sie schon unter 4 3 3 beschrieben wurde Die Befehlsstruktur war nun sehr einfach gehalten weil es ja nicht die endgultige L sung sein sollte Um die Motorleistung zu ver ndern muss man nur per Hyperterminal eine Zahl aus dem Bereich 0 1023 eintippen Diese Zahl wird auf dem LCD ausgegeben und kann auch korrigiert werden Best tigt man mit Enter so wird der String in einen unsigned Wert konvertiert und als neuer DutyCycle verwendet Mit und r kann man die Drehrichtung ndern und mit b und d kann man den Motor bremsen bzw ausschalten Als die externe Schaltung nun funktionst chtig war konnte man die Decoderleitungen des Motors die an die Pins 0 und 1 des Digitalen I O Ports B angeschlossen wurden auswerten und zum Ermitteln von Drehgeschwindigkeit und DrehRichtung nutzen Pin 0 und 1 der Ports B sind jeweils externe Interrupt Leitungen die separat konfiguriert werden k nnen Zunachst reichte es nur Pin O als Interruptleitung zu benutzen Die ISR der Externen Interrupts O konnte schon zur Ermittlung der Drehrichtung genutzt werden und um einen Z hler zu inkrementieren pragma interrupt DecoderISR void DecoderISR void direction PORTBboits RBL Wenn Pin 1 0 gt Linksdrehung Eick EE INTCONbi eS INTOIF 0 L schen des Interrupt Flags 2 67 PDV Vertiefung 11 07 2003 Um jetzt die Drehgeschwindigkeit zu bestimmen mussten wir einen Ti
135. n EINVALRDWR return NOERROR Die Funktion bearbeitet die Daten der CDATA struct BYTE ProcessCDATA CDATA data NetworkByteOrder gt HostByteOrder data gt direction swaps data gt direction data gt dutycycle swaps data gt dutycycle if data gt dutycycle gt 1023 return EINVALDC Richttungspins und UserLEDs beschalten LATC PORTC amp OxFC data direction amp 0x03 LATA PORTA amp OxF3 data gt direction amp 0x03 lt lt 2 DutyCycle festlegen SetDCPWMI data gt dutycycle Speichern des aktuellen Geschwindigkeitswert in der Struct data speed val speed ist HostByteOrder NetwokByteOrder data gt direction swaps data gt direction data gt dutycycle swaps data gt dutycycle data gt speed val swapl data gt speed val Annaeherung an Sollwert ausschalten approx FALSE return NOERROR BYTE ProcessSDATA SDATA data NetworkByteOrder gt HostByteOrder data gt speed val swapl data gt speed val Speed soll data gt speed val Aktuelle Geschwindigkeit in NetwokByteOrderin Struct speichern data gt speed val swapl speed ist Annaeherung an Sollwert einschalten approx TRUE return NOERROR Die Funktion gibt einen modifizierten DutyCycle zurueck Original DutyCycle 10Bit 0x000 Ox3FF Modifiziert 11Bit 0x000 Ox7FF 0x000 Ox3
136. n oder debuggen Unterst tzt werden 2 Programmiersprachen Assembler und C18 eine abgespeckte C Variante mehr dazu in Kapitel 2 3 Aa MPLAB IDE v6 20 File Edit View Project Debugger Programmer Configure Window Help ADRESL ADRESH ANOString AN1String PORTBbits Object Files Library Files Linker Scripts ANO und AN1 wandeln 18f452 lkr void convert D void void main void Zur berpr fung ob sich etwas ge ndert hat nur dann Ausgab char oldANO S8 F r Ausgabe ADO char old Ni 8 F r Ausgabe AD1 Ausgabe Text char anOString 5 char aniString 5 d Build Find in Files MPLAB ICD 2 nn Md Deleting intermediary files done SEITE acs Executing C programme mcc18 bin mecl1 If LCD Display initialisiern Executing C programme mccl8 bin nmcci1t 30 XLCDIniti Executing C programme mccl8 bin mcclt s1 XLCDClear Executing C programmemccl8bin mplir 32 d MPLINK 3 20 Linker Copyright c 2002 Microchip Technology Errors A MP2COD 3 20 COFF to COD File Converter o b MPLABICD2 IMPLABICD2 oer peo ii Obd iniz coi D WR 7 Bild 3 MPLAB IDE v6 2 Entwicklungsumgebung Auf dem Bild kann man den Desktop der Entwicklungsumgebung mit einzelnen Fenstern erkennen Unter anderem ist links oben das Projektfenster welches alle Projektdateien h lt Rechts daneben ist die Watch welches beim Debuggen verschiedene ausgew hlte Variablen
137. nfigure Window Help Object Files Library Files Linker Scripts PICiBF452 Auf der linken Seite kann man die Projekt bersicht sehen In diesem Fenster sind alle verwendeten Dateien aufgelistet so dass man schnellen Zugriff und eine Ubersicht hat Nachdem das Projekt erstellt wurde muss der verwendete Microcontroller angegeben werden Men Configure gt Select Device Select Device Device Microchip Tool Support MPLAB SIM B PICSTART Plus MPLABSIM30 PROMATEII MPLABICD 2 _MPLABICE 2000 MPLAB ICE 4000 9 PCMIGXCI G9 No Module PCMTEXH If the device you need is not listed or ifthe device is nat supported by the desired tool updates Yellow indicates Beta support Red indicates unsupported E n MEL PDV Vertiefung 11 07 2003 Wir verwenden nat rlich den PIC18F452 Microcontroller Auf diesem Dialog kann man zudem noch die Informationen erhalten welche Tools dieser Microcontroller unterst tzt F r uns wichtig an dieser Stelle ist die gr ne Diode bei MPLAB ICD 2 den wir als Programmer und Debugger verwenden wollen Nun sollten noch der verwendete Oszillator angegeben werden Men Configure gt Configuration Bits EN een Bits EE Osc Switch Enable Power Up Timer Disabled Brown Out Detect Disabled Brown Gut Voltage UM Watchdog Timer Enabled Watchdog Postscaler 1 125 CCPZ Mux BC Low Yoltage Program Disabled Background Debug Disabled Sowie den Brown Ou
138. ng 11 07 2003 col 0 XLCDClear XLCDGoto 0 0 XLCDPutROMString ROM char DISABLED else if isdigit data amp amp mode DISABLE und keine mehr annehmen XLCDGoto row col Cursor Position wiederherstellen if char pointer 0 XLCDClear XLCDGoto 0 0 if char pointer CHAR MAX XLCDGoto 0 0 XLCDPutROoMString ROM char buffer overflow char pointer 0 else xlcd buffer higher char pointer data XLCDPut data XLCDGetCursorPos amp row amp col Cursor Position wiederherstellen else if data CR amp amp mode DISABLE Nach Druecken von Enter if char pointer 0 XLCDGoto 0 0 XLCDPutROMString ROM char no val assigned else xlcd buffer higher char pointer 0 Zahlenstring terminieren duty cycle unsigned int atoul xlcd buffer higher und zuweisen if duty cycle gt 1023 XLCDGoto 0 0 XLCDPutROMString ROM char val must be lt 1024 char pointer 0 Puffer zuruecksetzen else i SetDCPWMI duty cycle XLCDGoto 0 0 XLCDPutROMString ROM char value assigned char pointer 0 Puffer zuruecksetzen else if data BS amp amp mode DISABLE Zeichen aus Puffer loeschen XLCDGetCursorPos amp row amp col Cursor Position wieder herstellen if col gt 0 Falls mindestens ein Zeichen im Puffer
139. ny application specific hardware y InitializeBoard Initialize all stack related components Following steps must be performed for all applications using PICmicro TCP IP Stack my TickInit Following steps must be performed for all applications using PICmicro TCP IP Stack xy MPFSInit Initialize Stack and application related NV variables ay InitAppConfig Depending on whether internal program memor is used or external EEPROM is used keep remove these block Ze This implementation initiates Board setup process if RB5 is detected low on startup if PORTE RBS XLCDGoto 1 0 XLCDPutROMString SetupMsg SetConfig StackInit if defined STACK USE HTTP SERVER HTTPInit endif if defined STACK_USE_FTP SERVER amp amp defined MPFS USE EEPROM FTPInit endif if defined STACK USE DHCP defined STACK USE IP GLEANING if AppConfig Flags bIsDHCPEnabled XLCDGoto 1 0 XLCDPutROMString DHCPMsg else Force IP address display update xy myDHCPBindCount 1 if defined STACK USE DHCP DHCPDisable endif endif if defined STACK USE MOTOR SERVER gt new MotorServerlnit endif Once all items are initialized go into infinite loop and let stack items execute their tasks If application needs to perform its own
140. o A KR Markus K hle Marco Kosinski 534931 X tt F Tt x interupt c RK Ck EEE Ck 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 07 100 PDV Vertiefung 11 07 2003 L kt Headerdateien DEE EEE Ck kk CkCkCk Ck 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 22 2 2 2 2 2 2 2 2 2 2207 include lt pl8cxxx h gt finclude interrupt h finclude usart h finclude defines h BOK KK KK AK HH HH HH kkk kK k k k ck ck kckckckck ck kokck ck ck ck kokck Funktionsdefinitionen HK eA kk kckckCkck ck 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 22 2 2 2 2207 Die Funktion realisiert einen ringf rmigen Puffer der via Flag schreibend oder lesend aufgerufen werden kann unsigned char read write buffer char c unsigned char rw volatile static char buffer BUFF SIZE Statischer Puffer volatile static unsigned read ptr 0 volatile static unsigned write ptr 0 MASK USART RX INT if rw READ if read ptr write ptr
141. pt 0 ist default High Prio INTCON3bits INT1IE 1 Enable ExtInt INTCON3bits INT1IP 1 ExtIntl gt High Prio INTCON3bits INT1IF 0 Loeschen des ExtIntl Flags 84 PDV Vertiefung 11 07 2003 INTCON2bits INTEDGO 1 ne Interrupt on Rising Edge Pin 0 u 1 des PORTB gt Output TRISBbits TRISBO 1 TRISBbits TRISBl 1 6 7 6 interrupt h tt Prozessdatenverabeitung Vertiefung Ansteurung eines Motors ber UDP mit Hilfe des PICDEM net x Demoboards und dem Microchip TCP IP Stack KKEKKKKKKKKKEKKK KKK KKK K KKK KK KKK KKK KKK KKK KKK KK KKK KKK KK kk kk kk kk zk Markus K hle Marco Kosinski 534931 interrupt c eK AA 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 07 ifndef INTERRUPT H define INTERRUPT H OK KK KK kk KKK HH HH kkk k K k k k HH ck kokckck ck k k k k k Headerdateien eK eA A A 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 07 finclude lt pl8cxxx h gt include stacktsk h BOR
142. r die Ethernetschnittstelle zu steuern Auf diesem Punkt sollte eigentlich unser Schwerpunkt liegen Durch die schon oft in der Dokumentation beschriebenen Schwierigkeiten sind wir leider erst kurz vor dem Ende unserer Verf gbaren Zeit an diesen Punkt gekommen Da aber unser Ehrgeiz ausreichte um wenigsten den Versuch zu starten doch noch das gesamte Projektziel zu ereichen wurde quasi Tag und Nacht an dieser L sung hier gearbeitet Grunds tzlich sollte man an dieser Stelle auch auf dem mitgelieferten MCHPStack hinweisen Da wir nur noch sehr wenig Zeit hatten ersparten wir uns die M he einen eigenen TCP Stack zu bauen und haben daher als Grundlage den MCHPStack verwendet In dem Source Code des MCHPStacks haben wir alle f r uns unn tigen Module wie z B DCHCP HTTP oder FTP rausgeschmissen und unseren UDP Client reinprogrammiert Im Quellcode den Header Files kann man auch immer die nderungen sehen da wir genau dokumentiert haben was wir ge ndert haben Wenn man nun dieses Projekt an dieser Stelle hier starten w rde oder neu vergeben dann k nnte man den Stack das Protokoll und die gesamte Anwendung ber Ethernet bestimmt perfektionieren Aber das war an dieser Stelle nicht mehr 68 PDV Vertiefung 11 07 2003 unser Gedanke vielmehr wollten wir die Anwendung berhaupt noch ber Ethernet zum laufen bringen Daher geht die Dokumentation auch nicht in perfektionistischer Weise an die Realisierung sondern es soll ein be
143. r higher Company Microchip Technology Inc Software License Agreement The software supplied herewith by Microchip Technology Incorporated the Company for its PICmicro Microcontroller is intended and supplied to you the Company s customer for use solely and exclusively on Microchip PICmicro Microcontroller products The software is owned by the Company and or its supplier and is protected under applicable copyright laws All rights are reserved Any use in violation of the foregoing restrictions may subject the user to criminal sanctions under applicable laws as well as to Civil liability for the breach of the terms and conditions of this license THIS SOFTWARE IS PROVIDED IN AN AS IS CONDITION NO WARRANTIES WHETHER EXPRESS IMPLIED OR STATUTORY INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE THE COMPANY SHALL NOT IN ANY CIRCUMSTANCES BE LIABLE FOR SPECIAL INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON WHATSOEVER HiTech PICC18 Compiler Options excluding device selection FAKELOCAL G E C 0X 0X A FF FF FF 0X FF F FF F FF HN FF HF OF Author Date Comment KARRIERE RIA REARS BUR BIRO RU RA BERRY AIR RS E BORG RRR BERS BIR PRE KERERE RENE REDERE RIBS RA BEBO BER Nr BEERS Nilesh Rajbharti 5 8 02 Original Rev 1 0 Nilesh Rajbharti 7
144. rammer gt MPLAB ICD 2 a MPLAB IDE v6 20 File Edit View Project Debugger Programmer Configure Window Help 5 re ki i E SS s Select Programmer wv Mone PICSTART Plus ME Untitled Workspace nix MPLAB ICD 2 PRO MATE II Bild 5 Programmer gt Select Programmer Es offnet sich direkt danach ein Output Fenster welches den Status des Connect Tests wiedergibt Wenn alle Ger te korrekt angeschlossen sind sollte folgender Output zu sehen sein Build Find in Files MPLAB ICD 2 Connecting to MPLAB ICD 2 Connected Setting Ydd source to target Target Device FILl5FP452 found revision x5 Reading ICD Product ID Running ILD Selt Test Fassed MFLAE ICD 2 Ready Bild 6 Select Device Output Zudem offnet sich noch eine Icon Men leiste mit alle Funktionen welche f r das Programmieren des Targets notwendig sind z B Program target device oder Reset and Connect to ICD Da die mitgelieferte Firmware schon in einem vorkompiliertem HEX File vorhanden ist wird kein neues Projekt erstellt sondern das File wird Importiert File gt Import Im Anschluss kann man leider nirgends erkennen dass etwas importiert wurde F r die Firmware wurden folgende Configuration Bits vorgegeben e Oscillator HS e Watchdog Timer Disabled e Low Voltage Programming Disabled Diese kann man im Men unter Configure Configuration Bits finden 11 PDV Vertiefung 11 07 2003 W Configuration Bit
145. rblick geschaffen werden wie wir vorgegangen und es realisiert haben Vorgehensweise Da wir die Ansteuerung des Motors schon ber die serielle Schnittstelle gel st haben musste dieser durch den Chip auch nichts ge ndert werden Und auch die Ermittlung der Geschwindigkeit und Drehrichtung konnte beibehalten werden Das Einzige was sich in der Hinsicht ge ndert hat dass jetzt auch Pin 1 an Port B einen Interrupt ausl st was zun chst nur eine h here Genauigkeit bedeutet Wir kamen zu dem Schluss UDP als verbindungsloses Protokoll die ideale Methode f r die Daten bermittlung an den Chip ist Doch die Frage war Was wollen wir bertragen Als erstes fiel uns die XDATA Struktur aus PDV ein doch die war daf r konzipiert einen Remotezugriff auf dem UART eines Hosts zu realisieren was hier etwas umst ndlich w re da man ja direkt auf die Register des PWM und PORTC zugreifen k nnte Allerdings w re es praktisch die XDATA Struktur weiterhin benutzen zu k nnen um ruckwartskompatibel zu sein Also behielten wir die XDATA Struktur f gten noch drei Strukturen hinzu e CDATA F r den direkte bertragung aller relevanten Werte e SDATA Zur bermittlung einer Sollgeschwindigkeit e EDATA Zur bermittlung von Fehlermessages an einen Client Nun hatten wir das Problem dass wir beim Empfang eines Pakets nicht wissen konnten um was f r eine Struktur es sich handelt Und ein Byte vorneweg senden konnten wir nicht wenn wir ruckwar
146. rden kann man erkennen dass Zeiten eingehalten werden mussen sobald ein Datenwort an den LCD Controller gesendet werden soll Da es sich zusatzlich noch um ein 8 Bit Datenwort aber nur um ein 4 Bit Interface handelt muss das Datenwort in zwei Schritten gesendet werden Zeitliche Abfolge der Befehle laut Zeitcharakteristik RS auf 0 R W auf 0 Adressierung vorbereiten Zeit tas Enable Bit auf 1 f r die Zeit ty Wahrend das Enable Bit auf 1 ist soll in der Zeit ty die Daten vorbereitet werden 6 Datenubertragung sobald Enable Bit wieder auf 0 pd Enz Naturlich muss der Port uber den die Daten gesendet werden vorher als Output geschaltet werden Da bei jedem Kommando fur das LCD Display diese Prozedur durchgegangen werden muss lohnt es sich hierfur eine Funktion zu schreiben In der verfugbaren Bibliothek hei t diese dann voia XLCDCommand unsigned char cmd Die gesamte hier durchgef hrte Vorgehensweise kann man folgenderma en in der XLCD Bilbiothek finden Auszug xlcd h Zi x Set your LCD type 230 PDV Vertiefung 11 07 2003 E nd En X E FOUR BIT amp LINES 5X8 Function Set defines define FOUR BIT 0600101111 4 bit Interface E EE EE EE Die gesamte Prozedur des Initialisierens findet sich in der Funktion voia xicpinit void aus der nun folgender Auszug kommt Auszug xlcd c oq ce xb Dopo oae XLCDCommand XCLD_TYPE Function set cmd Da das bertragen von Datenw rtern
147. s 300001 FA Bere Osc Switch Enable Disabled 300002 FF Power Up Timer Disabled Brown Out Detect Enabled Brown Out Voltage ee Ow 300003 Watchdog Timer Disabled Watchdog Postscaler 1 128 300005 COPA Mux Rel 300006 Low Voltage Program Disabled Background Debug Enabled atack Overflow Reset inisahbled Bild 7 Configurations gt Configuration Bits Wenn nun alle Einstellungen get tigt sind kann man das importierte HEX File Firmware auf das EEPROM programmieren Programmer gt Program oder auf das erste Icon Program targed device klicken Je nach dem wie gro das HEX File ist umso l nger kann das downloaden dauern Nach dem korrekten download sollte folgende Meldung im Output Fenster erscheinen Ea output gt Build Find in Files MPLAB ICD 2 Fassed MFLAB ICD 2 Ready Programming Target Erasing Part Programming Program Memory Programming Configuration Bits Verifying Program Memory Verity Succeeded Contig Memory Frogramming succeeded HPLAB ICD 2 Ready Bild 8 Program EEPROM Output Um das Programm auf dem Demo Board zu testen muss nur noch das Kabel von dem ICD 2 Gerat zu dem Board entfernt werden da sonst das Board nicht reagiert 2 5 Demo Firmware konfigurieren Da die Firmware default m ig auf DHCP eingestellt ist muss sie erst konfiguriert werden Dies geschieht mit einem einfachen Terminal Programm z B Hyper Terminal von Microsoft 12 PDV Verti
148. s Kapitel ber den MCHPStack entstanden Es soll deutlich gemacht werden wie wir bei Untersuchungen nach Port und Pinbelegungen vorgegangen sind 3 2 1 MCHPStack als einzige Quelle bei externe Peripherie Der MCHPStack ist die einzige Quelle mit Angaben bez glich Port und Pinbelegung Wenn die Demo Firmware auf dem Microcontroller programmiert ist und man den Reset Button dr ckt so kann man die aktuelle Version des Stack sowie die aktuelle IP Adresse von dem LCD Display ablesen Daher hat der MCHPStack das LCD Display in seinem Code angesprochen 3 2 2 Durchsuchen des Quellcodes von MCHPStack am Beispiel der Port und Pinbelegung des LCD Display zur Ansteuerung Wir haben gesehen dass nach dem Start der Anwendung auf dem LCD Display Ausgaben gemacht werden Also muss das LCD Display irgendwie am Anfang der main Methode oder in einer Init Funktion angesprochen werden 18 PDV Vertiefung 11 07 2003 Die main Methode ist in der Quellcode Datei websrvr c Hier wird die ganze Anwendung initialisiert und der Main Loop wird hier gehalten Wenn man nun in die Main Methode schaut kann man folgenden Ausschnitt erkennen Main entry point void main void TBLPTRU 0x00 Initialize any application specific hardware x InitializeBoard Initialize all stack related components Following steps must be performed for all applications using lt PICumLcro TCE IP Stack Ee Ae CHK E ders Die
149. sie und dr ckt anschlie end den Butten Add SFR um sie auf unsern Watch einzubinden Genauso verh lt es sich mit unseren String Variablen wobei dies in der rechten Listbox zu finden sind Grunds tzlich gilt bei der Watch immer die ben tigte Variable oder Register suchen selektieren und adden Dann sind sie auf der Watch sichtbar und k nnen beobachtet werden Ein solches Watch Window kann man abspeichern um nicht jedes mal sofern man seine Projektumgebung nicht speichert wieder von neuem suchen und einf gen muss Anhand der Quick Button Leiste kann man nachdem das Programm angehalten wurde Schrittweise vorw rts gehen Hier aber erst eine kleine Erkl rung des Men s nm mmm _57 PDV Vertiefung 11 07 2003 Von Links nach Rechts gibt es folgende Buttons e Run e Stop e Step F hrt den n chsten Befehl Zeile aus Bei einer Funktion wird in die Funktion gesprungen e Step Over Durchl uft die n chste Zeile und h lt erst nach dieser an Wir haben nun unseren Breakpoint in der Funktion convertap direkt vor der Umwandlung des ANO Eingangs gesetzt Nachdem wir das Programm nun im Debug Modus auf dem Microcontroller programmiert haben kann man es mit der Run Taste starten Wenn man keinen Breakpoint gesetzt hat kann man auch keinen Unterschied zu der normalen Microcontroller Programmierung erkennen Die Anwendung w rde dann durchgehend laufen ohne Unterbrechen Da wir aber einen Breakpoint gesetzt haben h
150. sspannung bis 30 V haben k nnen Ein Motor kann ber eine interne feste Frequenz oder Pulsweitenmodulation gesteuert werden A3968SA DIP LOGIC SUPPLY OUT ze SENSE 9 Da wir diesen Motor mit PWM steuern wollen muss der RC und der SENCSE Eingang auf MASSE gesetzt werden Somit ist die interne festen Frequenz Steuerung ausgeschaltet und jetzt kann man uber die INPUT Pins das PWM Signal anlegen Die interne Logik arbeitet mit folgender Wahrheitstabelle 262 PDV Vertiefung 11 07 2003 Brake mode Forward Reverse Disable Der Zustand Z bedeutet Hoher Widerstand Es ist also M glich den Motor auf verschiedenen Arten zu bremsen Die eine M glichkeit ist das abrupte sofortige Bremsen Brake mode und die andere ist das Abschalten des Motors was bedeutet dass dieser in seinen Umdrehungen ausl uft Wenn also eine etwas gr ere Tr gheit vorhanden ist dreht sich der Motor erst noch ein wenig weiter bis er stehen bleibt An Pin 3 dem Load Supply wird die Spannungsversorgung f r den Motor angeschlossen Wenn die H Br cke nun dem Motor Spannung geben m chte wird dies von der an Pin 3 anliegenden Spannung genommen Das genaue Datenblatt zu diesem IC ist im Anhang verf gbar 6 2 3 Motor Der Motor ist ein alter HP Druckermotor der ausgebaut wurde Das sch ne an diesem Motor ist dass er eine sehr feine Rasterung hat Er kann also sehr fein angesteuert und zum Drehen gebracht werden Zudem hat die
151. ster konfiguriert die Funktionen der Portpins 4 5 2 Register Konfiguration ADCONO Register 257 PDV Vertiefun 11 07 2003 Es ADCS1 ADCSO CHS2 CHS1 CHSO GO DONE ADON Konfiguration der einzelnen Bits Stelle Bedeutung 7 6 ADCS1 ADCSO A D Taktgeber f r Umwandlungszeit Auswahl Bits ADCON1 ADCONO Taktgeberumwandlung ADSC2 ADSC1 ADSCO 0 Fosc 2 00 0 201 osc O0 10 Fosc 32 11 FRC Abh ngig vom internen A D RC Oszillator 1 00 IFoso4 A JD 9 00 J Fosc 4 Fosc 16 Fosc 64 FRC Abh ngig vom internen A D RC Oszillator 5 3 CHS2 CHSO Analoge Eingangs Auswahl Bits 000 0 ANO GO DONE A D Umwandlung Status Bit Um die Umwandlung zu starten wird das Bit auf 1 gesetzt Wenn es auf 0 zur ckgesetzt wird ist die Umwandlung fertig nicht ous Wird als 0 gelesen MEM A D Power On Bit Bit EN Das A D Konverter Modul wird aktiviert BB x 38 PDV Vertiefun 11 07 2003 Das A D Konverter Modul wird deaktiviert ausgeschaltet und versorgt keine anliegenden Umwandlungen mehr ADCON 1 Register Ed ADFM ADCS2 PCFG3 PCFG3 PCFG3 PCFG3 Konfiguration der einzelnen Bits Stelle Bedeutung 7 ADFM A D Ergebnis Formatierung Auswahl Bit 1 Rechts B ndig M Die 6 Most Significant Bits des ADRESH Registers sind O Links Bundlg Die 6 Least Significant Bits des ADRESL Regsiters sind O Auf das genaue Auslesen wird weiter unten noch
152. ster oder als Slave kann er mit Peripherie wie A D oder D A ICs oder seriellen EEPROMs kommunizieren Wir wollen hier haupts chlich auf die Konfiguration und den Betrieb als UART eingehen 4 4 2 Register Der USART verf gt ber 5 Register die zum Betrieb ben tigt werden Transmit Status and Control Register TXS TA Receive Status and Control Regiser RCSTA Baud Rate Generator Register SPBRG USART Transmit Register TXREG USART Receive Register RCREG 2535 PDV Vertiefung 11 07 2003 EE EE SCENES a CSRC TX9 TXEN SYNC BRGH TRMT TX9D Da die Tx Leitung mit dem Pin6 und die Rc Leitungen mit dem Pin des digitalen I O Ports C gemultiplext sind muss Bit 6 des TRISC Registers 0 Output und Bit 7 1 Input gesetzt sein Um das interruptgesteuerte Senden und Empfangen zu erm glichen m ssen noch diverse Register des Interruptcontrollers konfiguriert werden Aber darauf wollen wir sp ter eingehen Register TXSTA Stelle Bedeutung 7 CSRC Clock Source Select Bit RW Default 0 Im Asynchronen Modus Keine Auswirkungen Im Synchronen Modus 1 Master Modus Takt wird vom internen Baud Rate Generator generiert O0 Slave Modus Takt kommt aus externer Quelle TX9 9 bit Transmit Enable Bit RW Default 0 Auswirkung Es werden immer 9 Bit gesendet Es werden immer 8 Bit gesendet Transmit Enable Bit RW Default 0 Auswirkung smi wird eingeschaltet en wird ausgeschaltet RW Defau
153. synchroner Modus Serial Port Enabled 8 Bit Empfang Enable Receiver E Eh as Enable Transmitter TxPin gt Output REPIN gt INPUT ED l E 4 EE Ne Ne Ne No Ne Ne a Damit sollte der USART Betriebsbereit sein Wird nun ein Paket empfangen wird das RCIF Bit im PIR1 Register auf dieses Register wird im Kapitel Interrupts n her eingegangen gesetzt Nach dem Auslesen des Pakets aus dem RCREG Register wird das Bit automatisch gel scht if PIRlbits RCIF 1 Paket wurde empfangen data RCREG Paket ausgelesen Bit wurde zr ckgesetzt Soll nun ein Paket gesendet werden muss zuerst gepr ft werden ob das Transmit Shift Register leer ist Dies macht man indem man nachschaut ob das TRMT Bit im TXSTA Register gesetzt ist Ist das der Fall kann man das Paket direkt in das TXREG Register laden was des Sendevorgang sofort einleitet Li TXSTAbi ts TRMT 1 Transmit Shirt Register ist leer TXREG data Daten werden sofort losgeschickt 4 5 AD Wandler 4 5 1 Eigenschaften Das Analog Digital Wandler Modul hat bei dem PIC18F4x2 8 Eing nge und einen Aufl sungsbereich von 10 Bit f r ein anliegendes Analoges Signal Es gibt folgende vier Register f r das A D Modul e A D Result High Register ADRESH e A D Result Low Register ADRESL e A D Control Register 0 ADCONO e A D Control Register 1 ADCON1 Das ADCONO Register kontrolliert die Operationen des A D Moduls Das ADCON1 Regi
154. t Detect und Low Voltage Program auf Disabled setzen da diese default m ig auf Enabled stehen aber bei uns nicht gebraucht werden Das einzige was sp ter noch einmal ge ndert wird ist Background Debug auf Enabled setzen um debuggen zu k nnen Als n chstes muss die Sprache gew hlt werden mit der man programmieren m chte Da wir die Hochsprache C verwenden wollen wird an dieser Stelle vorausgesetzt dass dies auch ordnungsgem installiert ist Die Installation des C18 Compilers ist recht einfach und am Ende wird man gefragt ob er selber die Pfade f r MPLAB setzen m chte was man der Einfachheit halber mit Ja antworten sollte Falls dies aber mit Nein geantwortet wurde kann man auch noch sp ter die Pfade zu dem C18 Compiler steten Men Project gt Set Language Tool Locations Nun muss aber im Projekt selber noch angegeben werden mit welcher Sprache programmiert werden soll Men Project gt Select Language Toolsuite 49 PDV Vertiefung 11 07 2003 Select Language Toolsuite e wl Active Toolsuite Microchip C18 Toolsuite Toolsuite Contents MPASM Assembler mpasmwin exe MPLINE Object Linker mplink exe MPLAB C18 E Compiler mcc18 exe Location of Selected Tool pragramme smcc 1 S sbinsmcc 8 ex Browse teal Nachdem nun die Sprache gew hlt wurde m ssen der Include Pfad der Library Pfad sowie der Linker Pfad gesetzt werden Men Project Build Options
155. task it should be done at the end of while loop Note that this is a co operative mult tasking mechanism where every task performs its tasks whether all in one shot or part of it and returns so that other tasks can do their job If a task needs very long time to do its job it must broken 89 PDV Vertiefung 11 07 2003 down into smaller pieces so that other tasks can have CPU time u while 1 This task performs normal stack task including checking for incoming packet type of packet and calling appropriate stack entity to process it T StackTask if defined STACK USE HTTP SERVER This is a TCP application It listens to TCP port 80 with one or more sockets and responds to remote requests W I HTTPServer endif if defined STACK USE FTP SERVER amp amp defined MPFS USE EEPROM FTPServer endif In future as new TCP IP applications are written it will be added here as new tasks ir Add your application speicifc tasks here RU if defined STACK USE MOTOR SERVER gt new MotorServer endif if defined STACK USE HTTP SERVER gt new ProcessIO endif For DHCP information display how many times we have renewed the IP configuration since last reset if DHCPBindCount myDHCPBindCount DisplayIPValue amp AppConfig MyIPAddr TRUE myDHCPBindCount DHCPBindCount if AppConfig Flags bIsDHC
156. tifier and rests of the items as command arguments 0X F F FF FF X FF FF 0E X EE o X X oo X koX xo x Note THIS IS AN EXAMPLE CALLBACK eK AA kk eA A 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 kk kk if defined STACK_ USE HTTP SERVER ROM char COMMANDS OK PAGE COMMANDS CGI Copy string with NULL termination define COMMANDS OK PAGE LEN sizeof COMMANDS OK PAGE ROM char CMD UNKNOWN PAGE INDEX HTM Copy string with NULL termination define CMD UNKNOWN PAGE LEN sizeof CMD UNKNOWN PAGE void HTTPExecCmd BYTE argv BYTE argc BYTE command BYTE var Design your pages such that they contain command code as a one character numerical value Being a one character numerical value greatly simplifies the job y command argv 0 0 0 Find out the cgi file name and interpret parameters accordingly a switch command case CGI_CMD DIGOUT 92 PDV Vertiefung 11 07 2003 This DIGOUTS CGI Any arguments with this file must be about controlling digital outputs y Identify the parameters Compare it in upper case format T var argv 1 0 0 switch var case VAR LED D5 This is DS Toggle D5 a LATA3 1 break case VAR LED De ae This is D6 Toggle it ird LATA2 1 break memcpypgm2ram argv 0
157. ts GIEL 1 Benoetigte PortPins als Ausgang schalten TRISCbits TRISCO 0 Drehrichtung Rechts TRISCbits TRISCI 0 Drehrichtung Links TRISCbits TRISC2 0 Ausgang PWM TRISAbits TRISA2 0 LED Links TRISAbits TRISA3 0 LED Rechts Drehricht auf Links Initialisieren LATCbits LATCO 0 LATCbits LATC1 1 LATAbits LATA2 0 Leuchter bei 0 LATAbits LATA3 1 Leuchter bei 0 XLCDClear while 1 if read write buffer amp data READ Falls Zeichen im Puffer bereitsteht if isalpha data switch data case BREAK In BREAK Mode wechseln if mode DISABLE XLCDClear mode BREAK LATCbits LATCO 0 LATCbits LATC1 0 LATAbits LATA2 0 LATAbits LATA3 0 break case LEFT In LEFT Mode wechseln if mode DISABLE XLCDClear mode LEFT LATCbits LATCO 0 LATCbits LATC1 1 LATAbits LATA2 0 LATAbits LATA3 1 break case RIGHT In RIGHT Mode wechseln if mode DISABLE XLCDClear mode RIGHT LATCbits LATCO 1 LATCbits LATC1 0 LATAbits LATA2 1 LATAbits LATA3 0 break case DISABLE In DISABLE Mode wechseln mode DISABLE LATCbits LATCO 1 LATCbits LATC1 1 LATAbits LATA2 1 LATAbits LATA3 1 In DISABLE Mode alle bisher char pointer 0 row 0 ingegebenen Zahlen verwerfen 111 PDV Vertiefu
158. ts kompatibel zu alten Programmen bleiben wollten Da allerdings der erste Wert der XDATA Struktur 16 Bit breit ist aber nur die niederwertigsten 2 Bit nutzen sind nun die h chstwertigen 3 Bit als Identifikation reserviert Und damit wir an XDATA nichts ndern m ssen sind diese drei Bit bei der otruktur 000 Im folgenden Listing kann man die verwendete CDATA und die anderen beiden Strukturen erkennen Aus PDV bekannte XDATA Struktur um einen Remotezugriff auf eine virtuelle RS232 Schnittstelle zu realisieren Wird aus Kompatibilitaetsgruenden zu alten Aufgaben implementiert Siehe ProcessXDATA EE fuer Details SCH typedef struct _XDATA WORD rdwr WORD port WORD value DWORD CU WORD status XDATA 7 Control Darta Scruktur erlaubt Remorezugrift aut die Register die PWM relevanten Register des PIC18F452 Dre ersten zwei Bir des om dereet ion m ssen seam Um dire CDATA Struct als solche zu kennzeichnen direction kann folgende Werte annehmen 0x0000 gt Break 0x0001 gt Rechtsdrehung 0x0002 gt Einkesdrehung 0x0003 gt Disable 69 PDV Vertiefung 11 07 2003 dutycycle hat einen Wertebereich von 0x000 OX3SFEF in speed val wird die aktuelle Geschwindigkeit in U min zur ckgeliefert 2A typedef struct CDATA WORD direction WORD dutycycle long speed val CDATA Speed Data Struktur erlaubt es eine Geschwindigkeit in U min anzugeben die der Motor erreichen soll dummy wird nur genu
159. turn ENOWRONLY else if data gt rdwr amp OxFF RDWR if data gt port amp OxFF DPORT WORD dc dc CCPRIL lt lt 2 CCPICON amp 0x30 gt gt 4 if data gt value 0x00 SetDCPWM1 922 90 else if data gt value 0x01 SetDCPWM1 819 80 else if data gt value 0x03 SetDCPWM1 717 70 else if data gt value 0x07 SetDCPWM1 614 60 else if data gt value Ox0OF SetDCPWM1 512 50 else if data gt value Ox1F SetDCPWM1 410 40 else if data gt value 0x3F SetDCPWM1 307 30 else if data gt value Ox7F SetDCPWM1 205 20 else if data gt value OxFF SetDCPWM1 102 10 else return EXPWM if dc lt 205 0 20 data gt value OxFF else ifl dc gt 205 amp amp dc lt 307 20 30 data gt value Ox7F else if dc gt 307 amp amp dc 410 30 40 data gt value Ox3F else if dc gt 410 amp amp dc lt 512 40 50 data gt value OxlF else if dc gt 512 amp amp dc lt 614 50 60 data gt value Ox0F else if dc gt 614 amp amp dc lt 717 60 70 data gt value 0x07 else if dc gt 717 amp amp dc lt 819 70 80 data gt value 0x03 else if dc gt 819 amp amp dc lt 922 80 90 data gt value 0x01 else 90 100 data gt value 0x00 PDV Vertiefung 11 07 2003 else return ENORDWR else retur
160. tzt um dre Struktur als SDATA Struct EE EE Ble 12 15 gt 1 speed val enthalt cdi cese ede und wird als Antwort die Ist Geschwindigkeit zugewiesen Rs typedef struct SDATA WORD dummy long speed val SDATA BEEOF Data Stcrukcur wird als Antwort bei alufgetretenen Fehlern an den Client gesendet dummy dient wieder nur der Kennzeichnung Bit 15 gt 1 message enth lt de Fehlertext F cypedef struct DES WORD dummy char message 32 EDATA Wenn nun ein Paket empfangen wurde wird dieses erst einmal in einen neutralen Puffer geladen und anschlie end berpr ft um welche Struktur es sich handelt j 7 AUSSECNNiEE aus cder Einkerom NMNororserver e data d val WORD Fburfer if dataid v 0 amp 0xE0 0XEQ error ProcessSDATA SDATA buffer else if dataid v 0 amp 0xEO USCH error ProcessCDATA CDATA buffer else if dataid v 0 amp 0xE0 0x00 error ProcessXDATA XDATA buffer else error EINVALSTCT Anschlie end wird die erkannte CDATA Struktur zur Auswertung der Daten weitergereicht Es beinhaltet den Dutycycle und die Drehrichtung Der Motor wird nun wieder wie bei der seriellen Ansteuerung gesteuert und gibt die gleichen lokalen Ausgaben Wir haben hier aber zus tzlich noch einen R cksende Verfahren eingebaut Es wird also wieder ein CDATA mit der Information Geschwindigkeit zur ck an den Client gesendet Daher ist es M glich die gesamte Kontro
161. u gepr ft 0 Kein Framing Error Im Synchronen Modus Keine Auswirkungen Overrun Error Bit R Default 0 Overrun Error Wird durch zur cksetzen des CREN geloescht 0 KeinOverrunError 0 RC9D Bit9 der Receive Daten RW Default 0 Register RCSTA Register SPBRG Dieses Register wird benutzt um die Baudrate zu bestimmen Diese errechnet sich aus folgenden konnen aus folgenden Formeln berechnet werden BRGH 0 Low Speed BRGH 1 High Speed Baud Fosc 64 SPBRG 1 Baud Fosc 16 SPBRG 1 Baud Fosc 4 SPBRG 1 N A Der PIC18F452 besitzt einen internen Oszillatortakt von 20MHz Damit lassen sich folgende Tabellen aufstellen Asynchron BRGH 0 Asynchron BRGH 1 Soll Soll Soll 0 3 l 1 2 Um eine moglichst kleine Abweichung von der gewunschten Baudrate zu erreichen empfiehlt es sich BRGH auf High zu setzen 236 lt PDV Vertiefung 11 07 2003 Register TXREG Dies ist das Transmit Register Dort werden die zu sendenden Daten hinein geladen Register RCREG Das Receive Register Hier k nnen empfangene Daten abgerufen werden 4 4 3 Konfigurieren des USART in C Um nun den USART als UART zu konfigurieren m ssen wir die vorgestellten Register entsprechend initialisieren TXSTAbits BRGH 1 Baudrate High Speed select SPBRG 64 High Speed Async gt 19200 Baud TXSTAbuUts SYNCG RESTAbTES SPEN RESTAbTES RX RCSTAbits CREN TXSTAbits TXEN E EE EE EE ra EE EE E A
162. urde an welcher Stelle sich auf dem PICDEM net Board welche Peripherie befindet kann man nichts finden was auf entsprechende Ansteuerung der Peripherie hinwei t Da unser f r unser Projekt unter anderem eine lokale Ausgabe auf dem LCD Display gew nscht ist war die erste Teilaufgabe das LCD Display welches eine externe Peripherie auf dem PICDEM net Board ist anzusprechen Mit diesem Ansatz ist es zwangsweise zu diesem Kapitel mit der allgemeinen berschrift Untersuchen des PICDEM net Board gekommen und haben bemerkt dass es durch nicht vorhandene Dokumentation ber Port und Pinbelegung sowie der einzelnen Bauteile sehr M hsam ist sich das zu erarbeiten Daher beginnt dieses Kapitel erst mit einer kleinen Erkl rung des C18 Compilers da dieser laut Dokumentation Bibliotheken mitbringt die f r das Ansprechen der Peripherie genutzt werden k nnen Zudem soll gezeigt werden wie wir vorangegangen sind und woher wir unsere Informationen bezogen haben bevor wir uns dem wirklichen Ansprechen der Peripherie zuwenden n chstes Kapitel Das Problem der nicht Vorhandenen Dokumentation ist mit einer der Gr nde daf r dass wir in der Zeit soweit zur ckgeworfen wurden Denn normalerweise sollte man von einem Hersteller erwarten k nnen dass er zu seinem Produkt welches er verkauft auch eine entsprechende Dokumentation mitliefert 3 1 Bibliotheken des C18 Compiler 3 1 1 Aufteilung der Bibliotheken Der Compiler halt sich wie schon beschrieben
163. vel modules ar nable disabled based on high level module selections xj define STACK USE TCP define STACK USE UDP When SLIP is used DHCP is not supported UA if defined STACK USE SLIP undef STACK USE DHCP endif When MPFS USE PGRM is used FTP is not supported Ty if defined MPFS USE PGRM undef STACK USE FTP SERVER endif Comment following line if StackTsk should wait for acknowledgement from remote host before transmitting another packet Commenting following line may reduce throughput x7 define TCP NO WAIT FOR ACK Uncomment following line if this stack will be used in CLIENT mode In CLIENT mode some functions specific to client operation are enabled u define STACK_CLIENT MODE If html pages are stored in internal program memory uncomment MPFS USE PRGM and comment MPFS USE EEPROM If html pages are stored in external eeprom memory comment MPFS USE PRGM and uncomment MPFS USE EEPROM KE define MPFS USE PGRM define MPFS USE EEPROM dif defined MPFS USE PGRM amp amp defined MPFS USE EEPROM error Invalid MPFS Storage option specified endif dif defined MPFS USE PGRM amp amp defined MPFS USE EEPROM terror You have not specified MPFS storage option endif When HTTP is enabled TCP must be enabled S if defined STACK USE HTTP SERVER if defined STACK USE TCP de
164. y10KTCYx 1000 Im Code erkennt man dass erst der Port A als Output konfiguriert wird dann werden die Dioden in ihren Start Zustand gesetzt und sp ter der Wert der anliegt einfach invertiert Man kann noch eine Bibliotheks Funktion erkennen pelay1oxtcyx 1000 die den Loop soweit verz gert dass das blinken mit unserem tr gen Auge zu erkennen ist Die beschriebenen Stellen sind hier nicht fett gedruckt da der abgedruckte Code ausreichend und selbsterklarend kommentiert ist 256 5 PDV Vertiefung 11 07 2003 4 3 LCD Display Eine der gr eren Herausforderungen in diesem Projekt war mit Sicherheit das verf gbare LCD Display Au er der allgemeinen Angabe dass das LCD Display von Hitachi ist wurde keinerlei Angabe diesbez glich gemacht Leider waren die Angaben der Portbelegung f r den Controller des LCD Displays nicht verf gbar Aber genau diese Information ist Notwendig wenn man den Controller ansprechen m chte Zudem war nicht klar welche Control W rter notwendig sind um das LCD Display zu konfigurieren oder anzusprechen Daher war die erste Aufgabe herauszufinden welchen genauen Typ von LCD Display von Hitachi wir verwenden 4 3 1 Eigenschaften Wenn man sich nun mit LCD Displays besch ftigt kann man verschiedene Merkmale feststellen wie diese Aufgebaut sind e X y Pixel Zeichendarstellung e Anzahl der verf gbaren Zeilen e n Zeichen pro Zeile e n Bit Interface LM LLL LCD Bild 12 Hitachi

Download Pdf Manuals

image

Related Search

Related Contents

AO SERVIÇO DA NATUREzA  Hotpoint MSZ Refrigerator User Manual  Manual.dfd  Manual de Instruções  the great outdoors by Minka Lavery 8276-A357-L Instructions / Assembly  Samsung CE287AST/XAG User Manual  1re année Contenu de l`ouvrage QuIckcheck Maths : Mode d`eMpLoI    取扱説明書 SC-HTX530  HELMET OWNER'S MANUAL - Specialized Bicycles  

Copyright © All rights reserved.
Failed to retrieve file