Datum: 07.05.2008 11:55
Hallo
Ich habe gerade begonnen mich mit PIC Programmierung zu befassen. Bei
der Firma microchip kann man als Technikstudent gratis samples
anfordern, wodurch ich nun meinen ersten PIC (16F88) erhalten habe.
Dummerweise schaffe ich es nicht ein Port, das ich als Eingang definiert
habe, auszulesen und am zweiten Port, das ich als Ausgang definiert
habe, auszugeben.
Dafür habe ich folgendes Testprogramm geschrieben:
ZAEHLER1 equ 020h
ZAEHLER2 equ 021h
a equ D'60'
movlw B'0'
tris PORTB
start movf PORTA,0
movwf PORTB
movlw a
movwf ZAEHLER1
movwf ZAEHLER2
repeat decfsz ZAEHLER2,1
goto repeat
movlw a
movwf ZAEHLER2
decfsz ZAEHLER1,1
goto repeat
goto start
end
mit diesem Programm will ich also bewirken, dass ein Bitmuster (das ich
an PORTA lege) am PORTB wieder ausgegeben wird. Die Schleife dient nur
als Zeitverzögerung. Lege ich nun aber einen als Eingang definierten Pin
auf Vss (oder Vdd) so tut sich am PORTB nichts.
Kann mir wer verraten was ich dabei falsch mache??
mfg alex
Datum: 10.05.2008 11:39
Hallo, grundsätzlich sehe ich im Quelltext keine Bankumschaltung und kein Configword. Ich würde erst mal die Grundlagen auf www.sprut.de empfehlen Bankumschaltung ist notwendig weil das Trisx und das Portx Register in verschiedenen Bänken liegen. Configword ist in fast allen Fällen ebenfalls notwendig zur Einstellung des Oszillators etc..
Datum: 11.05.2008 21:57
Hallo Danke für die Antwort! Ich habe schon auf sprut.de nachgesehen und einiges dazu gefunden. Durch den Befehl tris PORTX braucht man die Bänke nicht wechseln um die Ports als Ausgänge zu definieren (zumindest laut meinem Simulationsprogramm). Und nachdem sie ja standardmäßig als Eingänge definiert sind, habe ich mir gedacht ich braue mein Bitmuster nur an das entsprechende Port anlegen und kann dann schon darauf zugreifen!! mfg alex
Datum: 12.05.2008 00:42
Lese das Datenblatt des 16F88 und sieh Dir genau die Port-Pins an, ob sie nicht noch andere Funktionen haben. Gerne ist der Comperator auf solche Pins gelegt und muß nach einem Reset abgeschaltet werden. Auch muß man Pins, die sowohl analog als auch digital sein können, im ADC-Modul als digital definieren, weil sie sonst nicht ausgelesen werden können. Viel Spaß beim intensiven Durchkauen des Datenblatts.
Datum: 13.05.2008 12:03
Tja, im Datenblatt ist wirklich alles zu finden! An das habe ich bisher noch nicht gedacht. Danke für den Hinweis. ...es haut auch schon hin. Es hat eben genau an der ADC – Einstellung (im ADCON1 Register) gelegen. mfg alex
Datum: 13.05.2008 13:16
ANSEL ist ein Register, in dem du (analog select) Bits setzen kannst. Du musst das ANSEL-Register mit 0 beschreiben, wenn du digitale I/O Pins brauchst. Dann musst du die Tristate-Register beschreiben, welche die zugehörigen Portpins zwischen I oder O unterscheiden. Das Config-word ist entweder in der Software zu beschreiben oder in der Entwicklungsumgebung möglich(z.B. MPLAB)
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
- Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel