-
-
Erfahrener Benutzer
Roboter Experte
1.) Der 16F84 hat keinen Hardware-UART, das bedeutet keine Hardwareunterstützung für deine serielle Schnittstelle und somit musst du das Verhalten der seriellen Schnittstelle in Software nachbilden (oder einen anderen PIC mit Hardware-UART nehmen) - das ist aber nicht weiter schwer: Du musst an einem Pin in genau dem richtigen Takt deine Daten absenden und an einem anderen Pin auf deine Daten warten. Wenn du nur senden willst, ist das einfacher, aber wenn du auch empfangen willst, wird das ein klein wenig aufwendiger.
Das ganze sieht folgendermaßen aus:
PIC mit Hardware-UART (z.B. 16F870):
- du initialisierst den UART
- du schreibst das zu sendende Byte in ein spezielles Register
- fertig
PIC ohne Hardware-UART (z.B. 16F84):
- Timer einrichten
- Startbit am Pin anlegen
- Erstes Datenbit extrahieren (Bitmaske auf das Byte legen und verUNDen)
- Auf Timer-Interrupt warten
- den Ausgangspin entsprechend dem Datenbit setzen
- nächstes Bit extrahieren (rechtsverschieben, Bitmaske, verUNDen)
- auf Timer-Interrupt warten
- ...
- Stoppbit anlegen
- fertig
Also, wie du siehst ist beides nicht so aufwändig. Wenn du allerdings auch Daten mit dem PIC empfangen willst, so musst du bei Hardware-UART nur ein Register auslesen und fertig. Ohne Hardware-UART musst du nach dem Timer-Interrupt immer dein Empfangsbit prüfen, ob da ein Startbit dran liegt. Wenn ja, dann Merker setzen und weiter wie ghabt. Beim nächsten Timer-Interrupt das Bit am PIN auslesen und in ein Byte schieben (also verODERn, dann nach links verschieben). und immer so weiter, bis das 10. Bit da ist. Das muss dann HIGH sein.
Zur Hardware: MAX muss bei reinem senden nicht sein, da reichen Transistoren, die das Ausgangssignal invertieren. Wenn du den UART in Software nachbildest, kannst du auch auf die verzichten. Natürlich kannst du auch nen MAX nehmen, aber die 80 Cent kannst du dir auch sparen... 
Zur PC-Software: Dein Programm liest von der seriellen Schnittstelle immer ein Byte. Wie du das interpretierst - ob als Zahl oder als ASCII-Zeichen - das ist egal. Du kannst natürlich auch immer die Zahl anzeigen lassen... oder die Zahl umrechnen... alles prblemlos möglich.
MfG
Stefan
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen