inb() v jazyku C

Sekcia: Programovanie 04.12.2011 | 15:22
stanley   Návštevník
Ahojte! Potreboval by som radu, ako urobiť vstup cez LPT port v jazyku C. Rozhodol som sa vyskusat funkciu inb. PC by malo zaznamenat stlacenie tlacidla mikrospinaca. Tlacidlom som prepojil pin 25 (GND) a pin 1 cez rezistor 470 ohmov (bal som sa skratu). Na adrese 37Ah som zisťoval hodnotu a vypisoval ju do konzoly. Po stlaceni tlacidla sa hodnota nezmenila. V com je chyba? Tu je vypis programu: #include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/io.h>

#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1
#define BASEPORT 0x378

int main(void)
{
int a,i;
// Ziskanie prav pre pristup k portu
if (ioperm(BASEPORT, 3, 1))
{
perror("Nepodarilo sa ziskat pristup k LPT");
exit(EXIT_FAILURE);
}
outb(0,BASEPORT+2);
for (i=0;i<21;i++) {
// Zistovanie hodnoty na 37Ah - pin c.1
a=inb(BASEPORT+2);
sleep(1);
printf("Hodnota na vstupe je: %d \n",a);
}
// Uvolnenie prav pre pristup k portu
if (ioperm(BASEPORT, 3, 0))
{
perror("Nepodarilo sa uvolnit pristup k LPT");
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
}
    • Re: inb() v jazyku C 05.12.2011 | 08:38
      Avatar bedňa LegacyIce-antiX  Administrátor
      Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org
      • Re: inb() v jazyku C 05.12.2011 | 08:47
        Avatar bedňa LegacyIce-antiX  Administrátor
        Ešte tu
        Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org
        • Re: inb() v jazyku C 05.12.2011 | 21:25
          stano   Návštevník
          Jaj, s ujom googlom som sa rozpraval. Povedal mi, ze skoro vsetci chcu cez LPT cosi ovladadat, ale malokto chce cez LPT data prijimat.
    • Re: inb() v jazyku C 05.12.2011 | 20:29
      Avatar Jaroslav Imrich Ubuntu  Používateľ
      Nie som sice elektrotechnik, ale podla mna to mas zle zapojene. Nechapem co chces merat na pine 1 ked ho mas spojeny iba so zemou.
      We can't solve problems by using the same kind of thinking we used when we created them - A. Einstein
      • Re: inb() v jazyku C 05.12.2011 | 21:21
        stano   Návštevník
        Pin 1 je hardverovo negovany. Ak som poslal cez outb 0, znamena to, že na pine je logicka 1. Odmeral som a bolo tam napatie 3,25V. Ak chcem zmenit tento stav, uzemnim tento pin. Logicky by tuto zmenu mala funkcia inb zaznamenat.
        • Re: inb() v jazyku C 05.12.2011 | 21:42
          Avatar Jaroslav Imrich Ubuntu  Používateľ
          A ten spinac mas pocas citania hodnoty cez inb() zopnuty?
          We can't solve problems by using the same kind of thinking we used when we created them - A. Einstein
          • Re: inb() v jazyku C 05.12.2011 | 21:50
            stano   Návštevník
            Ano, samozrejme.
          • Re: inb() v jazyku C 05.12.2011 | 22:49
            stano   Návštevník
            Pozeral som ako sa robia vstupy na mikrokontroleri AT89C2051 a tam pripojili zem priamo na pin cez spinac (pin bol v stave1). Mozem to vsak urobit aj ja? Nepokazim si port? Je vo vnutri nejaky predradny odpor?
            • Re: inb() v jazyku C 05.12.2011 | 23:11
              Avatar Jaroslav Imrich Ubuntu  Používateľ
              Tym si nie som isty. Na hw.cz su uvedene "Zásady bezpečné práce proti zničení portu" a priame pripojenie na zem tam nespominaju. Rozmyslam ale nad tym, ze preco si si na experimentovanie vybral prave PIN1, ktory je vstupno-vystupny a nie napriklad cisto vstupny PIN15.
              We can't solve problems by using the same kind of thinking we used when we created them - A. Einstein
              • Re: inb() v jazyku C 06.12.2011 | 09:59
                stano   Návštevník
                Pouzivam kabel do tlaciarne. Vystupne piny su plne vytazene. Zo vstupnych mi zostava pin 1 a pin 13. Samozrejme mozem kabel vymenit za viaczilovy alebo prespajkovat a tak vyuzit piny z inych registrov. Mam vsak zasadu, ze co mozno urobit softverovo, neriesim hardverovo. Druha vec je, ze chcem mat jasno aj vo vstupno-vystupnych pinoch. Problemy treba riesit a nie ich obchadzat.
                • Re: inb() v jazyku C 06.12.2011 | 10:21
                  Avatar Jaroslav Imrich Ubuntu  Používateľ
                  No a na tej 13ke si to skusal?
                  We can't solve problems by using the same kind of thinking we used when we created them - A. Einstein
                  • Re: inb() v jazyku C 07.12.2011 | 23:25
                    stano   Návštevník
                    Na 13 pine to ide v pohode.
    • Re: inb() v jazyku C 06.12.2011 | 11:31
      johnny   Návštevník
      http://www.beyondlogic.org/spp/parallel.htm Naštuduj si módy LPT portu, mám taký ten pocit, že v SPP ti to nepôjde.
      • Re: inb() v jazyku C 06.12.2011 | 11:32
        johnny   Návštevník
        V biose sa to prepína :)
        • Re: inb() v jazyku C 07.12.2011 | 23:33
          stanley   Návštevník
          Dakujem, uz som prepol.
      • Re: inb() v jazyku C 07.12.2011 | 23:32
        stanley   Návštevník
        Mas pravdu. V Slovenskom Plynarenskom Podniku to nefunguje. :-)
        Ked som to prepol v BIOSe na Bi-directional, krasne to fungovalo.
        Vdaka za radu johnny. Problem je vyrieseny(len kto to odfajkne, ked som nezaregistrovany).
        • Re: inb() v jazyku C 08.12.2011 | 15:45
          johnny   Návštevník
          Nemáš za čo :) Určite sa nájde nejaký ten admin a ten to odfajkne :)