עבור לתוכן

שליטה על לדים דרך המחשב

Featured Replies

פורסם

אני רוצה לשלוט על כמה לדים דרך המחשב. יש לי ידע בתכנות (C/ASM), אין לי ידע באלקטרוניקה.

קראתי את המאמר הבא: http://www.codeproject.com/csharp/csppleds.asp

והבנתי בערך מה צריך לעשות על מנת להדליק לד - לשלוח 1 ל-data port המתאים. אבל מה קורה אם אני רוצה שהלד ידלוק כל הזמן (אני משער שכשאני שולח 1 ל-port המתאים, הלד דולק לזמן קצר ונכבה) ?

אפשר כמובן לכתוב קוד שמדליק את הלדים מחדש אחת לכמה זמן, אבל זה נראה לי קצת לא יעיל. האם יש דרך לעשות את זה בחומרה?

פורסם

למה לא יעיל? אתה עושה לולאה ושולח כל הזמן 1...

בכל מקרה אתה יכול לברר אם ה-data port שאליו אתה מחבר את הלדים עם דלגלגים (כמו parallel port) ואז אם אתה מזין 1, הוא ישאר שם..

ואם לא... אפשר לחבר דלגלגים ידנית:)

פורסם
  • מחבר

אני לא כ"כ מבין את המשפט האחרון - אני מתכוון לעבוד עם ה-parallel port, האם כאשר אני אזין 1 ישאר 1 ב-data port ?

לגבי יעילות, אם אני עושה לולאה ושולח כל הזמן 1, המעבד שלי יצטרך לעבוד קשה.

אפשר לשפר את זה ולהכניס sleep באמצע, לדוגמה:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/io.h>

#define PORT 0x378
#define INIT_VALUE 255
#define SLEEP_TIME 500000

int main(int argc, char *argv[])
{
unsigned char value = INIT_VALUE;

/* Set permissions for port */
if (ioperm(PORT, 1, 1) != 0) {
fprintf(stderr, "cannot access port");
return EXIT_FAILURE;
}

/* Output the value to PORT infinitely */
while (1) {
outb(value, PORT);
usleep(SLEEP_TIME);
}

return EXIT_SUCCESS;
}

אבל איך מחשבים את ה-SLEEP_TIME?

נראה לי שעדיף שזה יהיה ממומש בחומרה.

פורסם

אתה שולח ערך מסויים והוא נשאר שם עד שאתה משנה אותו..

לדוגמא 11000000

2 הלדים הראשונים ישארו דלוקים עד שתשלח ערך חדש

פורסם
  • מחבר

תודה, זה מה שהייתי צריך לדעת :)

פורסם

זה בדיוק מה שאמרתי:) אם אתה משתמש ב-parallel port ביציאות יש דלגלגים (flipflops) ואז אם אתה שולח 1 הוא ישמר שם עד שתשלח משהו חדש

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים