Sida 1 av 2

Tips hur man kan debugga ADC genom två I/O:s

Postat: 5 oktober 2016, 19:13:25
av Magnus_K
Hej hej,

Jag har dragit in en potentiometer till en PIC16F690 och skulle vilja läsa ut mitt 8-bitars ADC-värde genom de enda två I/O jag har kvar. Tyvärr är det inga I/O:s som har varken DAC eller någon seriell kommunikation.

Har ni någon smart idé hur jag kan få ur mitt värde ur dessa två portar?
Visning genom multimeter eller oscilloskop spelar ingen roll. Dock kan inte mitt skop debugga protokoll, så visningen kanske blir lite svårt visningsmässigt.

Re: Tips hur man kan debugga ADC genom två I/O:s

Postat: 5 oktober 2016, 19:18:27
av sodjan
Det enda tänkbara är väll en PWM signal som filtreras.
D.v.s för att "visa" värdet på en multimeter. Till ett oscilloskop
kan du ju skicka ett pulståg och räkna nollor och ettor direkt
på skärmen. Inte kul, men det går...

Re: Tips hur man kan debugga ADC genom två I/O:s

Postat: 5 oktober 2016, 19:25:56
av lillahuset
sodjan: Det är bara 8 bittar så det är ju en baggis. Speciellt om man har en klocka på den andra pinnen. Annars kan man ju bitbanga en UART om man har någorlunda kontroll över timingen.

Re: Tips hur man kan debugga ADC genom två I/O:s

Postat: 5 oktober 2016, 20:14:21
av Magnus_K
Hmm... skulle man kunna ändra frekvensen på något sätt? Så tex 0-255 blir 100-25500Hz?
Skulle vilja få värdet enkelt presenterat. Skopet räknar frekvensen på signalen och visar på displayen.

Nej, det blir nog för komplicerad kod...
Får ta och "klocka" ut registret på en pinne och se vad det blir av det. Är dock ganska säker att det tar för lång tid att dekoda.

Re: Tips hur man kan debugga ADC genom två I/O:s

Postat: 5 oktober 2016, 20:28:18
av lillahuset
Jag vet ju inte vad du har för begränsningar i övrigt men att omvandla värdet till ASCII och dumpa ut det i seriell form är trivialt om du inte har något annat som måste snurra och stör timingen.

Re: Tips hur man kan debugga ADC genom två I/O:s

Postat: 5 oktober 2016, 20:33:39
av Magnus_K
Det här är enbart för att testa och "kalibrera" systemet enligt pot:en, så kan om nödvändigt skjuta ner det mesta för att kika på det här.
Att dumpa ut det i ASCII i seriell form är säkert trivialt, för dig... Vad ska ta emot den seriella datan?

Re: Tips hur man kan debugga ADC genom två I/O:s

Postat: 5 oktober 2016, 20:36:40
av rvl
lillahuset skrev:Annars kan man ju bitbanga en UART om man har någorlunda kontroll över timingen.
Kanske det rent av finns nåt färdigt soft serial bibliotek, om man litar på andras kod?

Skicka datan i "läsbar" form till en terminal. Eller ja varför inte, glöm det andra för en stund och visa det på din display?

Re: Tips hur man kan debugga ADC genom två I/O:s

Postat: 5 oktober 2016, 20:44:28
av Magnus_K
Tänkte på det också men frågade här för att det kanske var något annat sätt (med hjälp av dom två utgångarna).
Få igång visning av dessa siffror på min display tar för lång tid att få till. Då mäter jag med multimeter mot IC-benet och räknar om vad det bör bli.

Tack för tipsen!

Re: Tips hur man kan debugga ADC genom två I/O:s

Postat: 5 oktober 2016, 20:55:29
av lillahuset
Ta emot på valfri serieport, gärna på PC.

Vad har du för klockfrekvens?
Kan du göra ett avbrott typ en gång per sekund när det inte behöver hända något annat?
Skriver du programmet i C eller assembler.

Vi ska nog lösa det här så har du ett verktyg till i din verktygslåda i framtiden. :D
"Learning by doing".

Edit: Det här kan du använda till allt möjligt. Det första jag brukar försöka få till i nya projekt är en UART, hård eller mjuk, som jag kan använda för olika debugmeddelanden.

Re: Tips hur man kan debugga ADC genom två I/O:s

Postat: 5 oktober 2016, 21:17:47
av Magnus_K
lillahuset skrev:Ta emot på valfri serieport, gärna på PC.
Jag har tyvärr ingen serieport på datorn och inget direkt "smidigt" heller som jag kan komma på. Däremot multimeter och skopet som jag nästan delar säng med.
Kanske skulle handla en serie<->USB adapter?

Klockfrekvens, 8MHz
Avbrott 1 gång per sek, helt ok
Programmeringsspråk, C

Re: Tips hur man kan debugga ADC genom två I/O:s

Postat: 5 oktober 2016, 21:22:59
av rvl
Kanske skulle handla en serie<->USB adapter?
...eller två? :)

Re: Tips hur man kan debugga ADC genom två I/O:s

Postat: 5 oktober 2016, 21:28:18
av lillahuset
Två är ett bra tips. :D
Jag tror jag har köpt minst tjugo stycken genom åren. Gissningsvis kan jag skrapa ihop sju stycken, resten har försvunnit till kunder osv. Men det är ju ok när de försvinner till betalande kunder. :)

Edit: Var noga med 3,3V vs 5V.

Re: Tips hur man kan debugga ADC genom två I/O:s

Postat: 5 oktober 2016, 21:31:35
av Magnus_K
Hehe ja. Har ni någon från eBay, Swech, Electrokit eller annat som ni kan rekommendera så får ni gärna länka.
Vad köra man med för program i datorn då? Obs. Kan säkert googla svaret men nu har jag er ändå på tråden.

Ska ut i verkstaden och åtgärda en liten tabbe innan jag återgår till det här. Blev lite tok vid montering av pot:en så det går fel ben till MCU:n.
Inte konstigt det blir 5V på ingången hela tiden...

Re: Tips hur man kan debugga ADC genom två I/O:s

Postat: 5 oktober 2016, 22:01:26
av lillahuset
Jag rekommenderar TeraTerm eftersom du förmodligen kör Windows. Hyperterminal har jag säkert lagt ett halvår på felsökning med så det kan jag omöjligt rekommendera.

Här har du några (otestade) funktioner för att bit-banga en UART. uartCalibrate kan du använda för att med oscilloskop kolla vad du får för baudrate. Justera UARTTXBITDELAY för att få en "normal" baudrate, 9600, 19200, 38400, 57600, 115200 med mindre än 2% fel. Jo 5% är nog tillräckligt bra. Observera att om du ändrar optimeringen kommer troligen timingen skita sig.
uartTxBit() sätter eller nollställer pinnen.

Lycka till!

Kod: Markera allt

void uartCalibrate(void)
{
  uartTx('U');
} /* uartCalibrate */


void uartTx(char c)
{
  int i;

  /* send start bit */
  uartTxBit(0);
  uartTxBitDelay();

  /* send character */
  for (i = 0; i < 8; i++) {
    if (0x01 & c) {
      uartTxBit(1);
    } else {
      uartTxBit(0);
    }
    c >>= 1;
    uartTxBitDelay();
  }

  /* send stop bit */
  uartTxBit(1);
  uartTxBitDelay();

} /* uartTx */


void uartTxBitDelay(void)
{
  volatile int delay;

  for (delay = 0; delay < UARTTXBITDELAY; delay++) {
  }

} /* uartTxBitDelay */

Re: Tips hur man kan debugga ADC genom två I/O:s

Postat: 5 oktober 2016, 22:23:33
av Magnus_K
Vad roligt. Tack!
Ska bara inhandla en sån adapter, sen återkommer jag.