Hast du 4Mhz als frequenz am Pic?
So long...
Hallo
Ich möchte das folgende Lernbeispiel von sprut.de zum laufen bringen:
http://sprut.de/electronic/pic/programm/rs232.htm
Die Schaltung habe ich erfolgreich zusammengebaut.
Das Programm ser_rx.asm habe ich insofern erweitert, dass am Anfang eine LED 2x blinkt.
Ich schicke nun vom PC via RS232 Kabel Daten an die Testschaltung, aber nichts geschieht.
Ich habe das PC inteface separat getestet, da läuft alles ok, d.h. Baud 9600, 8 databit, 1 stopbit und parity none.
Das RS232 Kabel ist 2m lang.
Wer kann mir einen Tipp geben, was evt falsch ist od wie kann ich den Fehler finden?
Danke für jegliche Hilfe.
Gruss
Sam
Hast du 4Mhz als frequenz am Pic?
So long...
Ja ich habe 4MHZ am PIC.Zitat von TomHumpen
Ich benutze den PIC 16F628; kann ich mit diesem evt nur via USART kommunizieren?
Danke, Gruss
Sam
Die Software Variante müßte in jedem Fall gehen, da du nur 2 IO Pins benutzt und das auswerten kein Problem macht. Wenn er USART on Board hat würde ich es nehmen, da mit einem MAX232 weniger Fehler, weil keine Berechnung der Abstände der Bits nötig sind. Auch sinbd die Pins hier schon am Pic vorgesehen.
Ansonsten: Hast du als Eingang (RS232 RX auch Pin A3 genommen wie im Sprut-Prog?). Ich kann auch nur raten und überprüf nochmal ob du die Portbelegung, wie Sprut sie nahm auch angelötet hast. Viel erfolg!
So long...
versuch erstmal, vom pic daten an den pc zu senden. ist imho einfacher, weil du dann am pc sachen wir baudrate und so einfacher ändern kannst, falls sie falsch ist. ausserdem siehst du, ob du überhaupt irgend nen signal bekommst. wenn du deinen pic so geproggt hast, dass er z.b. bei einem empfangenen "A" ne led anmacht und er irgendein sonderzeichen wegen störungen, falscher baudrate oder wasweissich kriegt, dann kann dabei ja nix rauskommen. also einfach mal ne schleife schreiben, mit der der pic immer wieder nen wort oder nen zeichen sendet. und dann kannst du in aller ruhe an deiner schaltung und an der verbindung und an den einstellungen basteln, bis du was brauchbares reinbekommst.
-> MEIN PROJEKTBLOG <-
darf ich fragen, was dabei jetzt rausgekommen ist?
-> MEIN PROJEKTBLOG <-
Ich habe die nachfolgende Schaltung genommen, einen 4MHZ Quartz angehängt und nun läuft alles super - echt genial!
http://www.oz1bxm.dk/PIC/628uart.htm
Nun 'kämfpe' ich aber mit der folgenden Frage...
https://www.roboternetz.de/phpBB2/viewtopic.php?t=10507
--
Gruss
Sam
Moin Moin,
habe mich in letzten Wochen bißchen versucht einzuarbeiten tutorials geleesen und so allerdings habe ich noch nit die möglich direkt zu testen da ich erst alles Theoretisch fertig haben soll.
Soweit so gut habe auch das Beispiel genommen und wollte sogar den PIC 16F628 benutzen.
Ich soll ein bestimmtes Signal das ich Einstellen kann abfangen und ein Relais durchschalten.
Habe denke auch soweit lauf fähig nur finde ich nichts um das Signal zu vergleichen das ich von der RS232 schnittstelle bekomme.
Wenn ich zum beispiel in einer Speicherzellespeicher und dann mit einer anderen vergleichen will oder so ?!
hat da jemand ne idee oder ahnung ?
mfg oxmox
Sicher, es ist eigentlich einfach... Du hast zwei Werte, die übereinstimmen sollen, welche, sag ma in einer Speicherzelle s und dem Arbeitsregister abgelegt sind:
Du musst dich fragen, wie vergleichst du z.B.: zwei Zahlen, ob sie identisch sind, wenn du "nur" addieren und subtrahieren zur Verfügung hast. Du subtrahierst die beiden Zahlen voneinander und schaust, ob das Ergebniss 0 ist. Wenn ja, sind beide Zahlen identisch.
MfGCode:movlw D'64' subwf s BZ identisch
Mobius
da ich ja das eingangs signal bestimmen kann hab ich es so gelöstCode:LIST P=16F628, R=DEC #include "P16F628.INC" CBLOCK 0x20 ; Declare variable addresses starting at 0x20 dataL ENDC ORG 0x000 ; Program starts at 0x000 ; ; -------------------------------- ; SET ANALOG/DIGITAL INPUTS PORT A ; -------------------------------- ; movlw 7 movwf CMCON ; ---------------- ; INITIALIZE PORTS ; ---------------- ; movlw b'00000000' movwf PORTA movlw b'00000100' movwf PORTB bsf STATUS,RP0 movlw 0xFF movwf TRISA movlw b'11110010' movwf TRISB ; ------------------------------------ ; SET BAUD RATE TO COMMUNICATE WITH PC ; ------------------------------------ ; Boot Baud Rate = 9600, No Parity, 1 Stop Bit ; movlw 0x19 ; 0x19=9600 bps (0x0C=19200 bps) movwf SPBRG movlw b'00000100' ; brgh = high (2) movwf TXSTA ; schaltet brgh high ein bcf STATUS,RP0 ; RAM PAGE 0 movlw b'10010000' ; schaltet seriellen port ein movwf RCSTA ; ; ------------------------------------ ; PROVIDE A SETTLING TIME FOR START UP ; ------------------------------------ ; clrf dataL settle decfsz dataL,F goto settle movf RCREG,W movf RCREG,W movf RCREG,W ; flush receive buffer ; ; --------- ; MAIN LOOP ; --------- ; loop call receive ; wait for a char call vergleich goto loop ; ; ------------------------------------------- ; SIGNALE VON DER RSR232 SCHNITTSTELLE EMPFANGEN ; ------------------------------------------- ; This routine does not return until a character is received. ; receive btfss PIR1,RCIF ; (5) check for received data goto receive movf RCREG,W ; speichert das empfangende in W return ; ; ------------------------------------------------------------- ;AUSWERTEN ; ------------------------------------------------------------- ; vergleich BTFSS W,b'00000001' goto receive bsf PORTA,b'00000001' goto vergleich END
allerdings habe ich noch ne verständniss frage undzwar:
habe ja datenblatt durchforstet habe soweit alle register verstanden allerdings noch nicht ganz was folgendes soll:
was iss das CMCON genau verstehe das was sie im datenblatt sagen wolle nicht genau im datenblatt steht auch nur When CM2:CM0: = 001 und einmal 010 aber in dem beispiel sind alle auf 111.Code:movlw 7 movwf CMCON
Und selbst wenn nun 010 wäre was soll heißen C1 Vin- connetcs to RA0
und das mit den muss ich noch rausfinden
bsf STATUS,RP0
aber das finde ich selbst noch raus
mfg vielen dank schonmal für die letzte hilfe oxmox
Lesezeichen