PIC18F45k20 auf PICkit 44-Pin Demoboard C18 Compiler MPLAB IDE v8.85 PICkit3 Hallo zusammen, ich verstehe gerade die Welt nicht mehr. Ich versuche mit meinem Controller ein 16bit Schieberegister (Par->Ser) auszulesen. Um das zu machen muss die Pins Mode und Clk ein wenig hin und hertoggeln. Mit diesem Code funktioniert alles einwandfrei: #define SR_MODE LATAbits.LATA0 // LTG 5 #define SR_CLK LATAbits.LATA1 // LTG 6 #define SR_SER PORTAbits.RA2 // LTG 7 #define bitset(var,bitno) (var|=1<<bitno) #define bitclr(var,bitno) (var&=~(1<<bitno)) (...) TRISAbits.RA0 = 0; TRISAbits.RA1 = 0; TRISAbits.RA2 = 1; (...) SR_MODE=0; SR_CLK=0; (...) // LOAD PORTA = 0b00000001; // CLK 0 MODE 1 Delay10KTCYx(t); PORTA = 0b00000011; // CLK 1 MODE 1 Delay10KTCYx(t); PORTA = 0b00000001; // CLK 0 MODE 1 // falling edge - load Delay10KTCYx(t); for ( i = 3; i>=0; i--) // fetch forth digit { // Shifter shifts reverse 0 1 2 3 4 ... 14 15 Delay10KTCYx(t); SR_CLK = 1; // Shift the bit if (SR_SER == 1) bitset(Forth,i); // Output high set bit high else bitclr(Forth,i); // Output low set bit low Delay10KTCYx(t); SR_CLK = 0; (die for Schleife wiederholt sich dann noch 3 mal) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Da ich aber nun auch die anderen Pins von PORTA brauche, habe ich das Laden folgendermaßen abgeändert: SR_MODE = 1; // CLK 0 MODE 1 Delay10KTCYx(t); SR_CLK = 1; // CLK 1 MODE 1 Delay10KTCYx(t); SR_CLK = 0; // CLK 0 MODE 1 // falling edge - load Delay10KTCYx(t); Und plötzlich geht es nicht mehr...?! Auch wenn ich ein direktes bitset und bitclear, aus den LATCH PORTS mache, alle anderen nicht verwendeten PORTApins auf Eingang (high oder low) oder Ausgang setze oder mehr Zeit gebe. NiX?! Hat jemand Rat? Viele Grüße Chris
Holger W. schrieb: > Analogeingänge disabled ? Hallo Holger, die ANs sind mit ANSEL = 0; alle deaktiviert Danke Das Problem hat sich anscheinend erledigt... habe das Laden nochmal umgeschrieben SR_CLK = 0; // CLK 0 MODE 0 Delay10KTCYx(t); SR_CLK = 1; // CLK 1 MODE 0 Delay10KTCYx(t); SR_MODE = 1; // CLK 1 MODE 1 Delay10KTCYx(t); SR_CLK = 0; // CLK 0 MODE 1 // falling edge - load Delay10KTCYx(t); Anscheinend braucht das Schieberegister erst die CLK 1 und dann die MODE 1 :-/ Aber erstmal mit dem µC schimpfen.... so kennt man das :-D
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.