Uart försök med 12F1840

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
newbadboy
Inlägg: 2426
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: Uart försök med 12F1840

Inlägg av newbadboy »

Jävlar vilka rf moduler, Det bara funkar. Ni hade rätt. Är riktigt nöjd just nu iaf :)

Vet ni förresten om de funkar bra på 4.5V?
Användarvisningsbild
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

Inlägg av Magnus_K »

Låter lovande inför kommande labbningar!
Vet inte om dom fungerar på 4,5V. Vad sitter det för IC på den?
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: Uart försök med 12F1840

Inlägg av lillahuset »

Chansen är rätt stor att ni slipper spekulera om ni läser databladet.
Användarvisningsbild
newbadboy
Inlägg: 2426
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: Uart försök med 12F1840

Inlägg av newbadboy »

Nej det går inte med mindre än 5. Vet inte vad det är för krets. Det är lödad skärmburk på.
Användarvisningsbild
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

Inlägg av Magnus_K »

Ja just jäklar ja, det hade jag gömt av.

@lillahuset:
Du får gärna visa vart -> http://swechtrading.se/zencart/index.php?main_page=product_info&cPath=52&products_id=614
Användarvisningsbild
lillahuset
Gått bort
Inlägg: 13969
Blev medlem: 3 juli 2008, 08:13:14
Ort: Norrköping

Re: Uart försök med 12F1840

Inlägg av lillahuset »

Nej det verkar inte framgå. Swech kanske vet.
Användarvisningsbild
newbadboy
Inlägg: 2426
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: Uart försök med 12F1840

Inlägg av newbadboy »

Det var just det att jag inte såg det i databladet så jag kollade med swech och det måste vara 5v.


En annan fråga.

Man kan sätta kanal (31st), RF adress(254st) och NET adress(254st) på dessa moduler. Vad innebär detta konkret. Kan jag ha då 31*254*254 unika RX/TX kombinationer som kan sända samtidigt (typ) och inte störa varandra??
Användarvisningsbild
Icecap
Inlägg: 26106
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Uart försök med 12F1840

Inlägg av Icecap »

Kanaler är det 31 av. Det ska alltså gå att ha upp till 31 par som pratar med varandra, par för par, utan problem.

De andra saker kan du läsa i databladet.
Användarvisningsbild
newbadboy
Inlägg: 2426
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: Uart försök med 12F1840

Inlägg av newbadboy »

Överföringen av strängen funkar nu alldeles utmärkt!!

Kretsen ska drivas av batteri så jag försöker få ner strömförbrukningen genom att sätta 433Mhz modulen i sleepmode genom att toggla dess CS pinne. Det funkar men inte helt och nu har nog blivit hemmablind igen.

Pinnen på PICen kallad CS togglar fint och styr 433Mhz modulen med ca 5Hz. Det som inte funkar är att vajre gång jag skickar en sträng så slutar den toggla pinnen av ngn anledning och den förblir hög så RF modulen är på hela tiden. Resetas endast när jag stänger av matningen. Så mao, har programmet gått in i Receive() en gång slutar CS toggla. Men programmet hänger inte sig för Solenoid utgången ändras varje gång jag skickar strängen.

Tankar kirng detta??

Kod: Markera allt

#define Solenoid LATA.F2
#define Buzzer LATA.F4
#define CS LATA.F5

char uart_rd[20];
int k=0;

void Recieve(){
 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'){
                                     Solenoid=1;
                                     delay_ms(500);
                                     Solenoid=0;
                                     delay_ms(4000);
                                     }
                }
}

void main(){
  OSCCON=0b01101000;       //4Mhz klocka
  TRISA=0b00000010;
  ANSELA=0b000000000;
  C1ON_bit=0;
  SRLEN_bit=0;
  UART1_Init(9600);
  CS=0;
  delay_ms(100);


    while(1){
             Solenoid=0;
             if(k==2000)
                CS=1;
             if(k>=4000){
               CS=0;
               k=0;
               }
             Recieve();
             k++;
              }
}
Användarvisningsbild
Icecap
Inlägg: 26106
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Uart försök med 12F1840

Inlägg av Icecap »

Vad med att testa strcmp()?

Nåväl, UART1_Data_Ready() verkar inte vara tom så att du konstant får veta att något finns men det kommer aldrig '\r'.

Alltså resultatet av ett dåligt kommunikationsprotokoll.
Användarvisningsbild
newbadboy
Inlägg: 2426
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: Uart försök med 12F1840

Inlägg av newbadboy »

OK men detta borde väl eg bara ändra toggel frekensen. Jag tycker att hoppar den in varje gång i recieve() så borde ju hoppa ur också och då bör den ju räkna upp k++. Fast lite långasammare bara? While(1) loopen innefattar ju allt.

Och solenoid går bara hög när jag faktiskt skickar en ny sträng. Så därmed går den genom hela while loopen kan jag tycka (och borde räkna upp k++)??
Användarvisningsbild
Icecap
Inlägg: 26106
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Uart försök med 12F1840

Inlägg av Icecap »

OK, du sänder en sträng. Den blir läst till och med '\n' (som kastas bort).
Men vad om '\n' följs av '\r'? (inte ovanligt i terminalprogrammer).

Då kommer UART1_Read_Text(uart_rd,"\n",255) att låsa sig till det att det kommer en '\n'.

Vet du att det enbart kommer exakt den rätta sträng?

Hela konceptet är i övrigt fel men som proof-of-concept duger det nog ganska bra.

En enkel test av strängen är i övrigt:

Kod: Markera allt

const char* Trigger = "KarolySimon";
  if(UART1_Data_Ready()==1)
    {
    UART1_Read_Text(uart_rd,"\n",255);
    if(!strcmp(uart_rd, Trigger))
      {
      Solenoid=1;
      delay_ms(500);
      Solenoid=0;
      while(UART1_Data_Ready()) UART1_Read_read-1-char-till-det-tar-slut; // Förslag till förbättring
      delay_ms(4000);
      }
    }
 
Användarvisningsbild
newbadboy
Inlägg: 2426
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: Uart försök med 12F1840

Inlägg av newbadboy »

Ska kolla mer på dina exempel ikväll.

Jag är väldigt säker på att det enbart kommer den sträng jag skickar om jag får lita på saleae logic.

Däremot kan ev tajming mellan CS och sträng göra ett paket korrupt kan jag tänka mig.

Vad tror du om min teori om att det ändå borde exekvera hela while loopen oavsett, fast med ngt lägre toggle frekvens?
Användarvisningsbild
Icecap
Inlägg: 26106
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Uart försök med 12F1840

Inlägg av Icecap »

Helt klart gör den ju inte det.
Användarvisningsbild
newbadboy
Inlägg: 2426
Blev medlem: 16 september 2006, 19:16:28
Ort: Landskrona
Kontakt:

Re: Uart försök med 12F1840

Inlägg av newbadboy »

Så du menar att den är helt fast i recieve funktionen. Är det ens möjligt.
Skriv svar