Uart försök med 12F1840
-
- Inlägg: 1400
- Blev medlem: 29 januari 2011, 21:06:30
- Ort: Lapplandet
Re: Uart försök med 12F1840
En delimiter är en avgränsare mellan olika "saker", i ditt fall strängar.
Om du t.ex. har "test" som delimiter och skickar in "123test" så kommer du få "123" i output. Skickar du "123456" kommer du inte få någon output alls eftersom delimitern inte finns med.
Om du t.ex. har "test" som delimiter och skickar in "123test" så kommer du få "123" i output. Skickar du "123456" kommer du inte få någon output alls eftersom delimitern inte finns med.
Re: Uart försök med 12F1840
Precis, delimiter är något som delar upp en mängd. Säg att du väl göra en enkel lista av siffror 1,2,3,4,5,6,7,8. Då kan du ange komma(',') som delimiter och få ut en Array av tal istället. Eller i ditt fall så läser du in tecken tills en delimiter dyker upp. Det är relativt vanligt att ha radbrytningstecken som delimiter då man i vissa fall skickar med ett enterslag.
Så du skulle kunna skicka något som "test\n" och sen ha "\n" som delimiter. Då får du ut "test"
Så du skulle kunna skicka något som "test\n" och sen ha "\n" som delimiter. Då får du ut "test"
Re: Uart försök med 12F1840
Ofan. Då hade jag missuppfattat helt vad den är till för. Ska prova imorgon och göra rätt delimiter. Återkommer.
Re: Uart försök med 12F1840
En delimiter är ett "här tar texten slut"-tecken/sekvens. Om du använder t.ex. Enter kan den vara \r.
Re: Uart försök med 12F1840
Det funkar fint nu med en kabel mellan TX ocg RX pic. Kopplade nu istället på 433Mhz moduler och det missar första pulsen så hela paketet blir korrupt. Finns det ngn allmän praxis att lösa detta?
RX Koden nedan är den som funkar bra med kabel.
CH1 TX
CH2 RX
RX Koden nedan är den som funkar bra med kabel.
Kod: Markera allt
#define OUT LATA.F2
char uart_rd[15];
void main(){
TRISA=0b00000010;
ANSELA=0b000000000;
C1ON_bit=0;
SRLEN_bit=0;
UART1_Init(9600);
delay_ms(100);
while(1){
OUT=0;
if(UART1_Data_Ready()==1){
UART1_Read_Text(uart_rd, "\n",255);
if(uart_rd[0]=='K')
if(uart_rd[1]=='a')
if(uart_rd[2]=='r')
if(uart_rd[3]=='o')
if(uart_rd[4]=='l')
if(uart_rd[5]=='y')
if(uart_rd[6]=='S')
if(uart_rd[7]=='i')
if(uart_rd[8]=='m')
if(uart_rd[9]=='o')
if(uart_rd[10]=='n'){
OUT=1;
delay_ms(100);
}
}
}
}
CH1 TX
CH2 RX
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Uart försök med 12F1840
newbadboy: Vilka 433MHz moduler?
Om det är de billiga skitmoduler från t.ex. K&C är du tvungen att skicka lite synkroniseringstecken först och sedan ett tecken som betyder "slut på synkroniseringen, nu kommer det data på riktigt".
Självklart ska man lägga till en checksum osv. då de moduler jag tänker på är så usla att det inte går att säkerställa vettig kommunikation.
Om det är de billiga skitmoduler från t.ex. K&C är du tvungen att skicka lite synkroniseringstecken först och sedan ett tecken som betyder "slut på synkroniseringen, nu kommer det data på riktigt".
Självklart ska man lägga till en checksum osv. då de moduler jag tänker på är så usla att det inte går att säkerställa vettig kommunikation.
Re: Uart försök med 12F1840
Kan inte riktigt se framför mig hur jag ska gå tillväga. Putta mig i rätt riktning....
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
Re: Uart försök med 12F1840
Är säkert ute och snurrar nu men signalerna vi ser på dina bilder är alltså skickad och mottagen data? Är det en MCU som pratar med en annan via två 433-moduler alltså?
Det kan inte vara så att du ligger fel på någon enhet med hur serieklockan står vid initieringen, dvs idle hög/låg?
Kan du länka till modulerna du köpt?
Det kan inte vara så att du ligger fel på någon enhet med hur serieklockan står vid initieringen, dvs idle hög/låg?
Kan du länka till modulerna du köpt?
Re: Uart försök med 12F1840
Här är modulerna jag använder
http://www.dx.com/p/diy-433mhz-wireless ... ion-446975
Vad jag kan se är sändar sidan ch1 hög när ingen signal skickas dvs är idle. Mottagarsidan är däremot låg i idle mode. Så den går hög först när den tagit emot en uppåtgående flank vad jag kan se. Sedan börjar den följa sändar signalen men som sagt första pulsen som också är data missar den ju då den ser den som ngn enable signal. Detta är min analys men det kanske är fel
Rätt lökigt kan man tycka. Jag har provat med pullups men den är driven låg när ingen signal finns.
http://www.dx.com/p/diy-433mhz-wireless ... ion-446975
Vad jag kan se är sändar sidan ch1 hög när ingen signal skickas dvs är idle. Mottagarsidan är däremot låg i idle mode. Så den går hög först när den tagit emot en uppåtgående flank vad jag kan se. Sedan börjar den följa sändar signalen men som sagt första pulsen som också är data missar den ju då den ser den som ngn enable signal. Detta är min analys men det kanske är fel
Rätt lökigt kan man tycka. Jag har provat med pullups men den är driven låg när ingen signal finns.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Uart försök med 12F1840
Icecap skrev:newbadboy: Vilka 433MHz moduler?
Om det är de billiga skitmoduler från t.ex. K&C är du tvungen att skicka lite synkroniseringstecken först och sedan ett tecken som betyder "slut på synkroniseringen, nu kommer det data på riktigt".
Självklart ska man lägga till en checksum osv. då de moduler jag tänker på är så usla att det inte går att säkerställa vettig kommunikation.
Vilka moduler tänker du på som är bättre?
Re: Uart försök med 12F1840
Det ska ställas ett DC-nivå i data-slicern och drt görs vid att skicka ett antal tecken med 50% DC-nivå, t.ex. 0x55. Drt behövs 5-20 tecken av dessa innan nivån är på plats.
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
Re: Uart försök med 12F1840
Kan kika mer på det i kväll men ditt problem känns kanske mer relaterat till start-bit.
Fungerar allt som det ska om du lägger till en nolla som start-bit, framför din data?
Fungerar allt som det ska om du lägger till en nolla som start-bit, framför din data?
Re: Uart försök med 12F1840
Har inte provat med nolla.
Menar du att jag ska skriva uart('0')? Ellet sätta pinnen 0 som en gpio om det ens går när jag konfat den som uart?
Menar du att jag ska skriva uart('0')? Ellet sätta pinnen 0 som en gpio om det ens går när jag konfat den som uart?
Re: Uart försök med 12F1840
Icecap skrev:Det ska ställas ett DC-nivå i data-slicern och drt görs vid att skicka ett antal tecken med 50% DC-nivå, t.ex. 0x55. Drt behövs 5-20 tecken av dessa innan nivån är på plats.
Oj. Är inte med vad data slicer och drt är. Fattar dc nivå m en det är nog allt jag fattar