Der AVR-/ARDUINO-Faden
Moderatoren: Heaterman, Finger, Sven, TDI, Marsupilami72, duese
Re: Der AVR-/ARDUINO-Faden
das würde auch das komische Verhalten auf der letzten Stufe erklären....
Die Hardware ist nämlich ok
Die Hardware ist nämlich ok
- Bauteiltöter
- Beiträge: 254
- Registriert: So 11. Aug 2013, 17:37
Re: Der AVR-/ARDUINO-Faden
Ja genau, und beim Maximalwert des ADCs wollte Xana doch den Minimalwert seiner Variable haben, oder habe ich das falsch verstanden?
Re: Der AVR-/ARDUINO-Faden
Ne, du hast das schon richtig verstanden, funktioniert prinzipiell ja auch schon ziemlich gut.
Ich habe das nun gemacht:
Funktioniert wunderbar!
Ich habe das nun gemacht:
Code: Alles auswählen
//Sitzheizung_rechts
if (digitalRead(sitz_rechts_on)){
val = analogRead (sitz_rechts_out);
analogWrite (sitz_rechts, val=1023-val/4+25);
}else{
digitalWrite(sitz_rechts, LOW);
Re: Der AVR-/ARDUINO-Faden
Der Maximalwert eines AD Wandlers ist immer (2^Q)-1 wobei Q die Anzahl von Bits ist
- Bauteiltöter
- Beiträge: 254
- Registriert: So 11. Aug 2013, 17:37
Re: Der AVR-/ARDUINO-Faden
Ja natürlich. Args. Tippfehler und nicht gemerkt. Natürlich meinte ich 1023, nicht 1034.
- Wurstblinker
- Beiträge: 601
- Registriert: Di 13. Sep 2016, 21:09
- Wohnort: weit West
Re: Der AVR-/ARDUINO-Faden
Hallo Leute
Ich glaube diesmal habe ich mich übernommen……….
Eine DRO (digital read out) Anzeige für die Drehmaschine,
mit einer optischen Maus als Geber und einer LCD Anzeige via Arduino ist wohl doch ein wenig hoch gegriffen für das erste Mikrocontroller Projekt überhaupt.
C Programmieren ist absolutes Neuland für mich , der seine bisherigen Gehversuche vor 20 Jahren mit Basic begann und vor 19 Jahren wider (bis auf ein paar kurze Ausflüge) beendete.
Aber Hallo Welt schreiben hat mich noch nie interessiert ,also Nase zuhalten und rein ins tiefe Wasser.
Diesmal leider zu tief……….
Seit 3 tagen komm ich keinen schritt mehr weiter…………….
Die Hardware ist kein Problem, und der Krempel aus dem Müll und funktioniert tadellos.
Da ich nicht programmieren kann (bin aber lernwillig ) habe ich mir erst mal alles benötigte im Netz "zusammengeklaut", und es nach ner knappen Woche auch zum Laufen gebracht.
Ist zustand :
Die Funkmaus gibt ihre Positionsänderung an den Arduino und der schreibt sie netterweise auch aufs Display.
Allerdings nur die Positionsänderungen , ich hätte aber gerne dort einen Positionswert der sich entsprechend der Mausbewegung ändert z.b. x300 und wenn die Maus sich 50 bewegt dann eben x 350
im Moment steht dann x50 oder x -20 weil die Maus sich in x +50 oder -20 bewegt hat.
Hätte nicht gedacht das das so ein großes Problem wird nachdem ich mich durch den Rest
von 0 an, auch durchkämpfen konnte.
Aber mir fehlt im Moment jeglicher Ansatz um das Programm meinen wünschen entsprechend zu ändern.
Hoffe ich habe wenigstens die entscheidenden Stellen durch die 3 gestrichelten Linien richtig identifiziert….
und zum 2. noch die PS2Mouse.h
Hoffe jemand hat nen Rettungsring, damit ich nicht komplett absaufe
bye, Andi
Ich glaube diesmal habe ich mich übernommen……….
Eine DRO (digital read out) Anzeige für die Drehmaschine,
mit einer optischen Maus als Geber und einer LCD Anzeige via Arduino ist wohl doch ein wenig hoch gegriffen für das erste Mikrocontroller Projekt überhaupt.
C Programmieren ist absolutes Neuland für mich , der seine bisherigen Gehversuche vor 20 Jahren mit Basic begann und vor 19 Jahren wider (bis auf ein paar kurze Ausflüge) beendete.
Aber Hallo Welt schreiben hat mich noch nie interessiert ,also Nase zuhalten und rein ins tiefe Wasser.
Diesmal leider zu tief……….
Seit 3 tagen komm ich keinen schritt mehr weiter…………….
Die Hardware ist kein Problem, und der Krempel aus dem Müll und funktioniert tadellos.
Da ich nicht programmieren kann (bin aber lernwillig ) habe ich mir erst mal alles benötigte im Netz "zusammengeklaut", und es nach ner knappen Woche auch zum Laufen gebracht.
Ist zustand :
Die Funkmaus gibt ihre Positionsänderung an den Arduino und der schreibt sie netterweise auch aufs Display.
Allerdings nur die Positionsänderungen , ich hätte aber gerne dort einen Positionswert der sich entsprechend der Mausbewegung ändert z.b. x300 und wenn die Maus sich 50 bewegt dann eben x 350
im Moment steht dann x50 oder x -20 weil die Maus sich in x +50 oder -20 bewegt hat.
Hätte nicht gedacht das das so ein großes Problem wird nachdem ich mich durch den Rest
von 0 an, auch durchkämpfen konnte.
Aber mir fehlt im Moment jeglicher Ansatz um das Programm meinen wünschen entsprechend zu ändern.
Hoffe ich habe wenigstens die entscheidenden Stellen durch die 3 gestrichelten Linien richtig identifiziert….
Code: Alles auswählen
/*============================ EG LABS ===================================//
Demonstration on how to use PS2 MOUSE with an arduino board
The circuit:
LCD:
* LCD RS pin to digital pin 12
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 7
* LCD D5 pin to digital pin 6
* LCD D6 pin to digital pin 5
* LCD D7 pin to digital pin 4
* LCD R/W pin to ground
* 10K resistor:
* ends to +5V and ground
* wiper to LCD pin 3
* LED anode attached to digital output 9
* LED cathode attached to ground through a 1K resistor
MOUSE:
DATA PIN TO PIN NUMBER 8
CLOCK PIN TO PIN NUMBER 3
============================== EG LABS ===================================*/
#include "PS2Mouse.h"
#define MOUSE_DATA 8
#define MOUSE_CLOCK 3
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 7, 6, 5, 4);
PS2Mouse mouse(MOUSE_CLOCK, MOUSE_DATA, STREAM); // initializing the PS2 library
int data[2];
int led = 9;
void setup()
{
pinMode(led, OUTPUT);
lcd.begin(16, 2);
lcd.print("ENGINEERS GARAGE");
lcd.setCursor(0, 1);
lcd.print(" PS2 MOUSE ");
delay(2000);
lcd.clear();
Serial.begin(38400);
mouse.initialize(); // initializing the PS2 mouse connected with the Arduino
digitalWrite(led, HIGH);
}
void loop()
//--------------------------------------------------------------------------------------------------------------------------------
//----------------------------------------Hier meine bescheidenen und sinnlose Versuche----------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------------
{
mouse.report(data); // get data from the mouse
int wertx; //zusätzliche variable für data1 definiert
int werty; //zusätzliche variable für data2 definiert
if((data[1] != 0) || (data[2] != 0) || (data[0] != 8))
{
lcd.clear();
Serial.print("X = "); //ab 38000baud darstellung richtig
lcd.print("X=");
Serial.print( data[1]); // X Movement Data
lcd.print( wertx + data[1]); //einfach + wertx geht nicht ??
lcd.setCursor(0, 1);
Serial.print(", Y = ");
lcd.print("Y=");
Serial.print(data[2]); // Y Movement Data
lcd.print(data[2]);
if(data[0] == 9)
Serial.print(", LEFT BUTTON"); // Status Byte
else if (data[0] == 10)
Serial.print(", RIGHT BUTTON"); // Status Byte
else if (data[0] == 12)
Serial.print(", CENTRE BUTTON"); // Status Byte
else;
Serial.println();
}else;
wertx = data[1] ; //neue variable für data, aber wie baue ich die hier um damit die "neue data"
werty = data[2] ; //dazugezählt oder abgezogen wird ?
}
//--------------------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------------
//******** PS2.h*******//
//#include "WConstants.h"
#include "HardwareSerial.h"
#include "PS2Mouse.h"
#include "Arduino.h"
PS2Mouse::PS2Mouse(int clock_pin, int data_pin, int mode) {
_clock_pin = clock_pin;
_data_pin = data_pin;
_mode = mode;
_initialized = false;
_disabled = true;
_enabled = false;
}
int PS2Mouse::clock_pin() {
return _clock_pin;
}
int PS2Mouse::data_pin() {
return _data_pin;
}
void PS2Mouse::initialize() {
pull_high(_clock_pin);
pull_high(_data_pin);
delay(20);
write(0xff); // Send Reset to the mouse
read_byte(); // Read ack byte
delay(20); // Not sure why this needs the delay
read_byte(); // blank
read_byte(); // blank
delay(20); // Not sure why this needs the delay
if (_mode == REMOTE) {
set_remote_mode();
} else {
enable_data_reporting(); // Tell the mouse to start sending data again
}
delayMicroseconds(100);
_initialized = 1;
}
void PS2Mouse::set_mode(int data) {
if (_mode == STREAM) {
disable_data_reporting(); // Tell the mouse to stop sending data.
}
write(data); // Send Set Mode
read_byte(); // Read Ack byte
if (_mode == STREAM) {
enable_data_reporting(); // Tell the mouse to start sending data again
}
if (_initialized) {
delayMicroseconds(100);
}
}
void PS2Mouse::set_remote_mode() {
set_mode(0xf0);
_mode = REMOTE;
}
void PS2Mouse::set_stream_mode() {
set_mode(0xea);
_mode = STREAM;
}
void PS2Mouse::set_sample_rate(int rate) {
if (_mode == STREAM) {
disable_data_reporting(); // Tell the mouse to stop sending data.
}
write(0xf3); // Tell the mouse we are going to set the sample rate.
read_byte(); // Read Ack Byte
write(rate); // Send Set Sample Rate
read_byte(); // Read ack byte
if (_mode == STREAM) {
enable_data_reporting(); // Tell the mouse to start sending data again
}
delayMicroseconds(100);
}
void PS2Mouse::set_scaling_2_1() {
set_mode(0xe7); // Set the scaling to 2:1
}
void PS2Mouse::set_scaling_1_1() {
set_mode(0xe6); // set the scaling to 1:1
}
// This only effects data reporting in Stream mode.
void PS2Mouse::enable_data_reporting() {
if (!_enabled) {
write(0xf4); // Send enable data reporting
read_byte(); // Read Ack Byte
_enabled = true;
}
}
// Disabling data reporting in Stream Mode will make it behave like Remote Mode
void PS2Mouse::disable_data_reporting() {
if (!_disabled) {
write(0xf5); // Send disable data reporting
read_byte(); // Read Ack Byte
_disabled = true;
}
}
void PS2Mouse::set_resolution(int resolution) {
if (_mode == STREAM) {
enable_data_reporting();
}
write(0xe8); // Send Set Resolution
read_byte(); // Read ack Byte
write(resolution); // Send resolution setting
read_byte(); // Read ack Byte
if (_mode == STREAM) {
disable_data_reporting();
}
delayMicroseconds(100);
}
void PS2Mouse::write(int data) {
char i;
char parity = 1;
pull_high(_data_pin);
pull_high(_clock_pin);
delayMicroseconds(300);
pull_low(_clock_pin);
delayMicroseconds(300);
pull_low(_data_pin);
delayMicroseconds(10);
pull_high(_clock_pin); // Start Bit
while (digitalRead(_clock_pin)) {;} // wait for mouse to take control of clock)
// clock is low, and we are clear to send data
for (i=0; i < 8; i++) {
if (data & 0x01) {
pull_high(_data_pin);
} else {
pull_low(_data_pin);
}
// wait for clock cycle
while (!digitalRead(_clock_pin)) {;}
while (digitalRead(_clock_pin)) {;}
parity = parity ^ (data & 0x01);
data = data >> 1;
}
// parity
if (parity) {
pull_high(_data_pin);
} else {
pull_low(_data_pin);
}
while (!digitalRead(_clock_pin)) {;}
while (digitalRead(_clock_pin)) {;}
pull_high(_data_pin);
delayMicroseconds(50);
while (digitalRead(_clock_pin)) {;}
while ((!digitalRead(_clock_pin)) || (!digitalRead(_data_pin))) {;} // wait for mouse to switch modes
pull_low(_clock_pin); // put a hold on the incoming data.
}
//--------------------------------------------------------------------------------------------------------------------------------
//------------------------------Von hier kommt wohl data1 und 2 ? --------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------------
int * PS2Mouse::report(int data[]) {
write(0xeb); // Send Read Data
read_byte(); // Read Ack Byte
data[0] = read(); // Status bit
data[1] = read_movement_x(data[0]); // X Movement Packet
data[2] = read_movement_y(data[0]); // Y Movement Packet
return data;
}
//--------------------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------------
int PS2Mouse::read() {
return read_byte();
}
int PS2Mouse::read_byte() {
int data = 0;
pull_high(_clock_pin);
pull_high(_data_pin);
delayMicroseconds(50);
while (digitalRead(_clock_pin)) {;}
delayMicroseconds(5); // not sure why.
while (!digitalRead(_clock_pin)) {;} // eat start bit
for (int i = 0; i < 8; i++) {
bitWrite(data, i, read_bit());
}
read_bit(); // Partiy Bit
read_bit(); // Stop bit should be 1
pull_low(_clock_pin);
return data;
}
int PS2Mouse::read_bit() {
while (digitalRead(_clock_pin)) {;}
int bit = digitalRead(_data_pin);
while (!digitalRead(_clock_pin)) {;}
return bit;
}
int PS2Mouse::read_movement_x(int status) {
int x = read();
if (bitRead(status, 4)) {
for(int i = 8; i < 16; ++i) {
x |= (1<<i);
}
}
return x;
}
int PS2Mouse::read_movement_y(int status) {
int y = read();
if (bitRead(status, 5)) {
for(int i = 8; i < 16; ++i) {
y |= (1<<i);
}
}
return y;
}
void PS2Mouse::pull_low(int pin) {
pinMode(pin, OUTPUT);
digitalWrite(pin, LOW);
}
void PS2Mouse::pull_high(int pin) {
pinMode(pin, INPUT);
digitalWrite(pin, HIGH);
}
Code: Alles auswählen
#ifndef PS2Mouse_h
#define PS2Mouse_h
#define REMOTE 1
#define STREAM 2
class PS2Mouse
{
private:
int _clock_pin;
int _data_pin;
int _mode;
int _initialized;
int _enabled;
int _disabled;
int read_byte();
int read_bit();
int read_movement_x(int);
int read_movement_y(int);
void pull_high(int);
void pull_low(int);
void set_mode(int);
public:
PS2Mouse(int, int, int mode = REMOTE);
void initialize();
int clock_pin();
int data_pin();
int read();
int* report(int data[]);
void write(int);
void enable_data_reporting();
void disable_data_reporting();
void set_remote_mode();
void set_stream_mode();
void set_resolution(int);
void set_scaling_2_1();
void set_scaling_1_1();
void set_sample_rate(int);
};
#endif
// http://www.engineersgarage.com/embedded/arduino/how-to-interface-ps2-mouse-with-arduino
//Da ich weiß welche Arbeit hinter dem bisherigen code steckt, gibt’s hier auch die Quelle.
bye, Andi
Re: Der AVR-/ARDUINO-Faden
Hallo,
die beiden Zeilen:
int wertx; //zusätzliche variable für data1 definiert
int werty; //zusätzliche variable für data2 definiert
ausserhalb der loop Funktion verschieben, damit sie nicht bei jedem loop Durchlauf gelöscht werden und dann anstatt:
wertx = data[1] ; //neue variable für data, aber wie baue ich die hier um damit die "neue data"
werty = data[2] ; //dazugezählt oder abgezogen wird ?
wertx = wertx + data[1];
werty = werty + data[2];
oder kürzer (generiert den selben code, nur andere schreibweise):
wertx += data[1];
werty += data[2];
die beiden Zeilen:
int wertx; //zusätzliche variable für data1 definiert
int werty; //zusätzliche variable für data2 definiert
ausserhalb der loop Funktion verschieben, damit sie nicht bei jedem loop Durchlauf gelöscht werden und dann anstatt:
wertx = data[1] ; //neue variable für data, aber wie baue ich die hier um damit die "neue data"
werty = data[2] ; //dazugezählt oder abgezogen wird ?
wertx = wertx + data[1];
werty = werty + data[2];
oder kürzer (generiert den selben code, nur andere schreibweise):
wertx += data[1];
werty += data[2];
- Wurstblinker
- Beiträge: 601
- Registriert: Di 13. Sep 2016, 21:09
- Wohnort: weit West
Re: Der AVR-/ARDUINO-Faden
Hallo,
vielen Dank das war schon mal das halbe Problem…
Int wertx und y aus der Loop raus zu nehmen war der entscheidende Tipp. mny tnx @ Blueloop
Die Anzeige funktioniert jetzt,
aber leider nur in y (data[2])
Das hängt wohl damit zusammen das data[2] schon gleich zu anfang ( Zeile 35)
deklariert ist.
Ein zusätzliches int data[1]; an dieser Stelle ergibt leider die Fehlermeldung:
36: error: conflicting declaration 'int data [1]'
35: error: 'data' has a previous declaration as 'int data [2]'
Wie komme ich denn an den wert von data [1]ran ?
B.z.w. wie bekomme ich ihn sauber in eine neue variable?
Brauche ihn ja auch später noch um die schritt / mm Umrechnung zu machen.
Die entscheidenden stellen sind (hoffentlich) wieder zwischen den 3 Linien
bye, Andreas
vielen Dank das war schon mal das halbe Problem…
Int wertx und y aus der Loop raus zu nehmen war der entscheidende Tipp. mny tnx @ Blueloop
Die Anzeige funktioniert jetzt,
aber leider nur in y (data[2])
Das hängt wohl damit zusammen das data[2] schon gleich zu anfang ( Zeile 35)
deklariert ist.
Ein zusätzliches int data[1]; an dieser Stelle ergibt leider die Fehlermeldung:
36: error: conflicting declaration 'int data [1]'
35: error: 'data' has a previous declaration as 'int data [2]'
Wie komme ich denn an den wert von data [1]ran ?
B.z.w. wie bekomme ich ihn sauber in eine neue variable?
Brauche ihn ja auch später noch um die schritt / mm Umrechnung zu machen.
Die entscheidenden stellen sind (hoffentlich) wieder zwischen den 3 Linien
bye, Andreas
Code: Alles auswählen
/*============================ EG LABS ===================================//
Demonstration on how to use PS2 MOUSE with an arduino board
The circuit:
LCD:
* LCD RS pin to digital pin 12
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 7
* LCD D5 pin to digital pin 6
* LCD D6 pin to digital pin 5
* LCD D7 pin to digital pin 4
* LCD R/W pin to ground
* 10K resistor:
* ends to +5V and ground
* wiper to LCD pin 3
* LED anode attached to digital output 9
* LED cathode attached to ground through a 1K resistor
MOUSE:
DATA PIN TO PIN NUMBER 8
CLOCK PIN TO PIN NUMBER 3
============================== EG LABS ===================================*/
#include "PS2Mouse.h"
#define MOUSE_DATA 8
#define MOUSE_CLOCK 3
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 7, 6, 5, 4);
PS2Mouse mouse(MOUSE_CLOCK, MOUSE_DATA, STREAM); // initializing the PS2 library
int data[2];
//int data[1];waehre ja auch zu einfach gewesen
int led = 9;
int wertx; //zusätzliche variable für data1 definiert
int werty; //zusätzliche variable für data2 definiert
void setup()
{
pinMode(led, OUTPUT);
lcd.begin(16, 2);
lcd.print("ENGINEERS GARAGE");
lcd.setCursor(0, 1);
lcd.print(" PS2 MOUSE ");
delay(2000);
lcd.clear();
Serial.begin(38400);
mouse.initialize(); // initializing the PS2 mouse connected with the Arduino
digitalWrite(led, HIGH);
}
void loop()
//----------------------------------------------------------------------------------------------------------------------------
//-----------------------------------Hier meine bescheidenen und sinnlose Versuche---------------------------
//----------------------------------------------------------------------------------------------------------------------------
mouse.report(data); // get data from the mouse
if((data[1] != 0) || (data[2] != 0) || (data[0] != 8))
{
lcd.clear();
Serial.print("X = "); //ab 38000baud darstellung richtig
lcd.print("X=");
Serial.print( data[1]); // X Movement Data
lcd.print( wertx); //einfach wertx geht nicht , gibt immer noch nur
// die Unterschiede aber nicht den Gesamtwert aus
lcd.setCursor(0, 1);
Serial.print(", Y = ");
lcd.print("Y=");
Serial.print(data[2]); // Y Movement Data
lcd.print(werty); //funktioniert !
if(data[0] == 9)
Serial.print(", LEFT BUTTON"); // Status Byte
else if (data[0] == 10)
Serial.print(", RIGHT BUTTON"); // Status Byte
else if (data[0] == 12)
Serial.print(", CENTRE BUTTON"); // Status Byte
else;
Serial.println();
}else;
wertx = wertx+data[1] ; //neue variable für data,
werty = werty+data[2] ; //funktioniert aber leider nur mit data2 und nicht mit data1
//data[1] wird ja weiter unten(markiert) generiert komme
//ich dort irgendwie an den wert ?
}
//----------------------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------------------
//******** PS2.h*******//
//#include "WConstants.h"
#include "HardwareSerial.h"
#include "PS2Mouse.h"
#include "Arduino.h"
PS2Mouse::PS2Mouse(int clock_pin, int data_pin, int mode) {
_clock_pin = clock_pin;
_data_pin = data_pin;
_mode = mode;
_initialized = false;
_disabled = true;
_enabled = false;
}
int PS2Mouse::clock_pin() {
return _clock_pin;
}
int PS2Mouse::data_pin() {
return _data_pin;
}
void PS2Mouse::initialize() {
pull_high(_clock_pin);
pull_high(_data_pin);
delay(20);
write(0xff); // Send Reset to the mouse
read_byte(); // Read ack byte
delay(20); // Not sure why this needs the delay
read_byte(); // blank
read_byte(); // blank
delay(20); // Not sure why this needs the delay
if (_mode == REMOTE) {
set_remote_mode();
} else {
enable_data_reporting(); // Tell the mouse to start sending data again
}
delayMicroseconds(100);
_initialized = 1;
}
void PS2Mouse::set_mode(int data) {
if (_mode == STREAM) {
disable_data_reporting(); // Tell the mouse to stop sending data.
}
write(data); // Send Set Mode
read_byte(); // Read Ack byte
if (_mode == STREAM) {
enable_data_reporting(); // Tell the mouse to start sending data again
}
if (_initialized) {
delayMicroseconds(100);
}
}
void PS2Mouse::set_remote_mode() {
set_mode(0xf0);
_mode = REMOTE;
}
void PS2Mouse::set_stream_mode() {
set_mode(0xea);
_mode = STREAM;
}
void PS2Mouse::set_sample_rate(int rate) {
if (_mode == STREAM) {
disable_data_reporting(); // Tell the mouse to stop sending data.
}
write(0xf3); // Tell the mouse we are going to set the sample rate.
read_byte(); // Read Ack Byte
write(rate); // Send Set Sample Rate
read_byte(); // Read ack byte
if (_mode == STREAM) {
enable_data_reporting(); // Tell the mouse to start sending data again
}
delayMicroseconds(100);
}
void PS2Mouse::set_scaling_2_1() {
set_mode(0xe7); // Set the scaling to 2:1
}
void PS2Mouse::set_scaling_1_1() {
set_mode(0xe6); // set the scaling to 1:1
}
// This only effects data reporting in Stream mode.
void PS2Mouse::enable_data_reporting() {
if (!_enabled) {
write(0xf4); // Send enable data reporting
read_byte(); // Read Ack Byte
_enabled = true;
}
}
// Disabling data reporting in Stream Mode will make it behave like Remote Mode
void PS2Mouse::disable_data_reporting() {
if (!_disabled) {
write(0xf5); // Send disable data reporting
read_byte(); // Read Ack Byte
_disabled = true;
}
}
void PS2Mouse::set_resolution(int resolution) {
if (_mode == STREAM) {
enable_data_reporting();
}
write(0xe8); // Send Set Resolution
read_byte(); // Read ack Byte
write(resolution); // Send resolution setting
read_byte(); // Read ack Byte
if (_mode == STREAM) {
disable_data_reporting();
}
delayMicroseconds(100);
}
void PS2Mouse::write(int data) {
char i;
char parity = 1;
pull_high(_data_pin);
pull_high(_clock_pin);
delayMicroseconds(300);
pull_low(_clock_pin);
delayMicroseconds(300);
pull_low(_data_pin);
delayMicroseconds(10);
pull_high(_clock_pin); // Start Bit
while (digitalRead(_clock_pin)) {;} // wait for mouse to take control of clock)
// clock is low, and we are clear to send data
for (i=0; i < 8; i++) {
if (data & 0x01) {
pull_high(_data_pin);
} else {
pull_low(_data_pin);
}
// wait for clock cycle
while (!digitalRead(_clock_pin)) {;}
while (digitalRead(_clock_pin)) {;}
parity = parity ^ (data & 0x01);
data = data >> 1;
}
// parity
if (parity) {
pull_high(_data_pin);
} else {
pull_low(_data_pin);
}
while (!digitalRead(_clock_pin)) {;}
while (digitalRead(_clock_pin)) {;}
pull_high(_data_pin);
delayMicroseconds(50);
while (digitalRead(_clock_pin)) {;}
while ((!digitalRead(_clock_pin)) || (!digitalRead(_data_pin))) {;} // wait for mouse to switch modes
pull_low(_clock_pin); // put a hold on the incoming data.
}
//--------------------------------------------------------------------------------------------------------------------------------
//------------------------------Von hier kommt wohl data1 und 2 ? ----------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------------
int * PS2Mouse::report(int data[]) {
write(0xeb); // Send Read Data
read_byte(); // Read Ack Byte
data[0] = read(); // Status bit
data[1] = read_movement_x(data[0]); // X Movement Packet
data[2] = read_movement_y(data[0]); // Y Movement Packet
return data;
}
//--------------------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------------
int PS2Mouse::read() {
return read_byte();
}
int PS2Mouse::read_byte() {
int data = 0;
pull_high(_clock_pin);
pull_high(_data_pin);
delayMicroseconds(50);
while (digitalRead(_clock_pin)) {;}
delayMicroseconds(5); // not sure why.
while (!digitalRead(_clock_pin)) {;} // eat start bit
for (int i = 0; i < 8; i++) {
bitWrite(data, i, read_bit());
}
read_bit(); // Partiy Bit
read_bit(); // Stop bit should be 1
pull_low(_clock_pin);
return data;
}
int PS2Mouse::read_bit() {
while (digitalRead(_clock_pin)) {;}
int bit = digitalRead(_data_pin);
while (!digitalRead(_clock_pin)) {;}
return bit;
}
int PS2Mouse::read_movement_x(int status) {
int x = read();
if (bitRead(status, 4)) {
for(int i = 8; i < 16; ++i) {
x |= (1<<i);
}
}
return x;
}
int PS2Mouse::read_movement_y(int status) {
int y = read();
if (bitRead(status, 5)) {
for(int i = 8; i < 16; ++i) {
y |= (1<<i);
}
}
return y;
}
void PS2Mouse::pull_low(int pin) {
pinMode(pin, OUTPUT);
digitalWrite(pin, LOW);
}
void PS2Mouse::pull_high(int pin) {
pinMode(pin, INPUT);
digitalWrite(pin, HIGH);
}
- Fritzler
- Beiträge: 12600
- Registriert: So 11. Aug 2013, 19:42
- Wohnort: D:/Berlin/Adlershof/Technologiepark
- Kontaktdaten:
Re: Der AVR-/ARDUINO-Faden
Es fehlt an ALLEN Grundlagen bei dir, also les ein C-Buch.
http://www.c-howto.de/tutorial.html
http://www.tutorialspoint.com/cprogramming/
https://www.mikrocontroller.net/article ... C-Tutorial
http://www.c-howto.de/tutorial.html
http://www.tutorialspoint.com/cprogramming/
https://www.mikrocontroller.net/article ... C-Tutorial
- Wurstblinker
- Beiträge: 601
- Registriert: Di 13. Sep 2016, 21:09
- Wohnort: weit West
Re: Der AVR-/ARDUINO-Faden
Bitte nicht Falsch verstehen !
Ich weiß das mir die Grundlagen fehlen.
Und das hier stochern im Nebel angesagt ist.
Das Ziel ist aber nicht programmieren zu lernen, sondern eine DRO Anzeige
für die Drehbank zu bauen.
Die ich mir Fertig einfach nicht leisten kann.
Und dazu fehlen mir jetzt noch 2 Schritte:
1. diesen blöden wert von data1 aufs Display zu bekommen
2. das ganze in ein Gehäuse zu packen und an die Drehe zu spaxen.
Deshalb dachte ich, dass ich hier mit meinen 2 Fragen an der richtigen stelle währe.
Habe mich wirklich bemüht das Problem genau zu beschreiben
und auf einen 2. tipp, wie den 1. von blueloop gehofft der das Problem löst.
Ich erwarte ja nicht das jemand das für mich fertig programmiert und bin auch schon über
einen Hinweis froh.
Natürlich wäre es schön den gesamten Programmcode verstehen zu können..
Aber um mich so tief in die Materie einzuarbeiten, fehlt mir leider auch etwas Lebenszeit,
die ich bisher in das Lernen anderer dinge investiert habe,
von denen nun andere Leute bei anderen Fragen profitieren können.
bye, andi
Ich weiß das mir die Grundlagen fehlen.
Und das hier stochern im Nebel angesagt ist.
Das Ziel ist aber nicht programmieren zu lernen, sondern eine DRO Anzeige
für die Drehbank zu bauen.
Die ich mir Fertig einfach nicht leisten kann.
Und dazu fehlen mir jetzt noch 2 Schritte:
1. diesen blöden wert von data1 aufs Display zu bekommen
2. das ganze in ein Gehäuse zu packen und an die Drehe zu spaxen.
Deshalb dachte ich, dass ich hier mit meinen 2 Fragen an der richtigen stelle währe.
Habe mich wirklich bemüht das Problem genau zu beschreiben
und auf einen 2. tipp, wie den 1. von blueloop gehofft der das Problem löst.
Ich erwarte ja nicht das jemand das für mich fertig programmiert und bin auch schon über
einen Hinweis froh.
Natürlich wäre es schön den gesamten Programmcode verstehen zu können..
Aber um mich so tief in die Materie einzuarbeiten, fehlt mir leider auch etwas Lebenszeit,
die ich bisher in das Lernen anderer dinge investiert habe,
von denen nun andere Leute bei anderen Fragen profitieren können.
bye, andi
- Fritzler
- Beiträge: 12600
- Registriert: So 11. Aug 2013, 19:42
- Wohnort: D:/Berlin/Adlershof/Technologiepark
- Kontaktdaten:
Re: Der AVR-/ARDUINO-Faden
Nich rausreden, sondern C lernen.
Ich will doch auch nicht auf den Mond fliegen ohne vorher eine Ausbildung absolviert zu haben.
Ich will doch auch nicht auf den Mond fliegen ohne vorher eine Ausbildung absolviert zu haben.
Re: Der AVR-/ARDUINO-Faden
Code: Alles auswählen
int data[2];
In dieser Funktion wird aber auf ein drittes Element geschrieben. Das gibt normalerweise Probleme.
Code: Alles auswählen
int * PS2Mouse::report(int data[]) {
write(0xeb); // Send Read Data
read_byte(); // Read Ack Byte
data[0] = read(); // Status bit
data[1] = read_movement_x(data[0]); // X Movement Packet
data[2] = read_movement_y(data[0]); // Y Movement Packet
return data;
}
Code: Alles auswählen
int data[3];
Das ist mir als erstes aufgefallen. Kann also noch etwas mehr nicht stimmen.
Re: Der AVR-/ARDUINO-Faden
Hallo Wurstblinker,
ich glaube, es ist keine gute Idee, eine Maus als DRO zu verwenden.
Siehe die Beiträge im Sensoren-Thread.
An einer Drehe braucht man eine absolut zuverlässige Anzeige auf 1/100 mm genau!
Sonst wird das nichts. Wie willst Du die Maus mit dem Drehbankbett überhaupt zuverlässig koppeln?
Ich hab in der letzten Finger-Postille ein DRO mit billigen China-Schiebelehren und einem Arduino beschrieben.
Billig, gut und absolut zuverlässig. Mit Programm! Kostenpunkt: so um die 5.-€
Wenns was Besseres sein soll: siehe den Sensoren-Thread, da beschreibe ich einen preiswerten (ca. 30.-€) Sensor, der geht aber auf 1/1000 mm genau!
Tu Dir was Gutes und bau was Ordentliches an Deine Drehbank.
Gruß,
Harley
ich glaube, es ist keine gute Idee, eine Maus als DRO zu verwenden.
Siehe die Beiträge im Sensoren-Thread.
An einer Drehe braucht man eine absolut zuverlässige Anzeige auf 1/100 mm genau!
Sonst wird das nichts. Wie willst Du die Maus mit dem Drehbankbett überhaupt zuverlässig koppeln?
Ich hab in der letzten Finger-Postille ein DRO mit billigen China-Schiebelehren und einem Arduino beschrieben.
Billig, gut und absolut zuverlässig. Mit Programm! Kostenpunkt: so um die 5.-€
Wenns was Besseres sein soll: siehe den Sensoren-Thread, da beschreibe ich einen preiswerten (ca. 30.-€) Sensor, der geht aber auf 1/1000 mm genau!
Tu Dir was Gutes und bau was Ordentliches an Deine Drehbank.
Gruß,
Harley
- Wurstblinker
- Beiträge: 601
- Registriert: Di 13. Sep 2016, 21:09
- Wohnort: weit West
Re: Der AVR-/ARDUINO-Faden
Also sollte da oben
int data[3];
stehen.
Das ist mir als erstes aufgefallen. Kann also noch etwas mehr nicht stimmen.
Anse
Ich werd verrückt, genau das war das Problem !
Hätte ich selbst wohl nie gefunden,
vielen dank @ Anse und Blueloop
Für eure Hilfe
Endlich macht die Anzeige was sie soll "!
@harlay
habe den Sensoren Thread gelesen, die Idee mit der Maus spukt aber schon ein paar Monate länger….
Für das antüddeln an den Schlitten hab ich ne schöne Schiene auffem Schrott gefunden die wohl mal für was ähnliches gedacht war.
Meine versuche mit Maus und Messuhr waren überraschend gut .
Da die Drehe eh 3-4 hundertstel schlag und Zehnteleinteilung auf den Skalenringen hat bin ich sicher damit hinzukommen bis mir evtl. was besseres über den weg läuft.
bye , Andi
Re: Der AVR-/ARDUINO-Faden
Compiler für andere Sprachen hätte diesen Fehler gefunden. C-Compilern ist so was relativ egal.Ich werd verrückt, genau das war das Problem !
Hätte ich selbst wohl nie gefunden,
In welcher Einheit wird die Position angezeigt?
- Wurstblinker
- Beiträge: 601
- Registriert: Di 13. Sep 2016, 21:09
- Wohnort: weit West
Re: Der AVR-/ARDUINO-Faden
Im moment noch in Pixel.
Die Versuchs Maus hat 800 dpi also komme ich so um die 3 hundertstel Auflösung.
Hier trollt aber auch noch ne Logilink Kabelmaus mit 2000 dpi rum die wahrscheinlich später zum Einsatz kommt.
Die Versuchs Maus hat 800 dpi also komme ich so um die 3 hundertstel Auflösung.
Hier trollt aber auch noch ne Logilink Kabelmaus mit 2000 dpi rum die wahrscheinlich später zum Einsatz kommt.
Re: Der AVR-/ARDUINO-Faden
boh, Gray -Binar Umwandelcode macht mir fertig.
sollte 25bit Gray ins binär umgewandelt werden, es tut irgendwie, aber NICHT binär.
was ich da gemacht habe, MSB von Gray direkt ins binär übertrage, danach binäre MSB mit eine kleinere Stelle von Gray über XOR verküpfen und Ergebnisse zu kleinere binäre Stelle übertragen.
ENCdata = Graycode aus Encoder
result= binäre Ergebnisse
sollte 25bit Gray ins binär umgewandelt werden, es tut irgendwie, aber NICHT binär.
was ich da gemacht habe, MSB von Gray direkt ins binär übertrage, danach binäre MSB mit eine kleinere Stelle von Gray über XOR verküpfen und Ergebnisse zu kleinere binäre Stelle übertragen.
ENCdata = Graycode aus Encoder
result= binäre Ergebnisse
Code: Alles auswählen
result = (ENCdata & 0x8000 );
result = (ENCdata & 0x4000) ^ (result>>1);
result = (ENCdata & 0x2000) ^ (result>>1);
result = (ENCdata & 0x1000) ^ (result>>1);
result = (ENCdata & 0x0800) ^ (result>>1);
result = (ENCdata & 0x0400) ^ (result>>1);
result = (ENCdata & 0x0200) ^ (result>>1);
result = (ENCdata & 0x0100) ^ (result>>1);
result = (ENCdata & 0x0080) ^ (result>>1);
result = (ENCdata & 0x0040) ^ (result>>1);
result = (ENCdata & 0x0020) ^ (result>>1);
result = (ENCdata & 0x0010) ^ (result>>1);
result = (ENCdata & 0x0008) ^ (result>>1);
result = (ENCdata & 0x0004) ^ (result>>1);
result = (ENCdata & 0x0002) ^ (result>>1);
result = (ENCdata & 0x0001) ^ (result>>1);
Re: Der AVR-/ARDUINO-Faden
argh, jetzt weiss, ich dass diese Code kacke ist, "result" wird immer übergeschrieben.. so war es..
aber falls ihr bessere Gray - Binär Code Wandler hat, her damit.
Grüss
Matt
aber falls ihr bessere Gray - Binär Code Wandler hat, her damit.
Grüss
Matt
- Fritzler
- Beiträge: 12600
- Registriert: So 11. Aug 2013, 19:42
- Wohnort: D:/Berlin/Adlershof/Technologiepark
- Kontaktdaten:
Re: Der AVR-/ARDUINO-Faden
Selbst mit veroderung kommt da Käse raus, da du auch die Bits zu früh ausmaskierst, dass darf erst nach dem XOR passieren, also so hier:
Oder schön als Schleife mit später auch mal mehr oder weniger Bit gehen:
Code: Alles auswählen
int gray_to_bin(int ENCdata){
int result = ENCdata & 0x8000;
result |= (ENCdata ^ (result >> 1)) & 0x4000;
result |= (ENCdata ^ (result >> 1)) & 0x2000;
result |= (ENCdata ^ (result >> 1)) & 0x1000;
result |= (ENCdata ^ (result >> 1)) & 0x0800;
result |= (ENCdata ^ (result >> 1)) & 0x0400;
result |= (ENCdata ^ (result >> 1)) & 0x0200;
result |= (ENCdata ^ (result >> 1)) & 0x0100;
result |= (ENCdata ^ (result >> 1)) & 0x0080;
result |= (ENCdata ^ (result >> 1)) & 0x0040;
result |= (ENCdata ^ (result >> 1)) & 0x0020;
result |= (ENCdata ^ (result >> 1)) & 0x0010;
result |= (ENCdata ^ (result >> 1)) & 0x0008;
result |= (ENCdata ^ (result >> 1)) & 0x0004;
result |= (ENCdata ^ (result >> 1)) & 0x0002;
result |= (ENCdata ^ (result >> 1)) & 0x0001;
return result;
}
Code: Alles auswählen
#define GRAYBITS 16
int gray_to_bin(int ENCdata){
int i, result = ENCdata & (1 << (GRAYBITS-1));
for (i = GRAYBITS - 2; i >= 0; i--){
result |= (ENCdata ^ (result >> 1)) & (1 << i);
}
return result;
}
Re: Der AVR-/ARDUINO-Faden
so kommt vor, dass ich an daran zerbricht und nicht mehr so klar denkt , dazu verarscht Encoder mir mit invertierende Gray-Code...(mein Fehler, SSI Datenleitung vertauscht)
diese Code funktioniert ja, aber Länge von 16 bit beschränkt, auch wenn ich von "int" zu "long" abgeändert habe, ist Ergebnisse immernoch auf 16 bit beschränkt. Merkwürdig oder kleine krasse Denkfehler hab ich ?.. (result, ENCdata ist bereits mit "uint32_t" definiert.)
Das Danke hast du aber klar verdient .
Grüss
Matt
diese Code funktioniert ja, aber Länge von 16 bit beschränkt, auch wenn ich von "int" zu "long" abgeändert habe, ist Ergebnisse immernoch auf 16 bit beschränkt. Merkwürdig oder kleine krasse Denkfehler hab ich ?.. (result, ENCdata ist bereits mit "uint32_t" definiert.)
Das Danke hast du aber klar verdient .
Grüss
Matt
-
- Beiträge: 3261
- Registriert: Mo 12. Aug 2013, 19:47
Re: Der AVR-/ARDUINO-Faden
Es ist nicht unüblich, daß bei µCs ints 16 oder sogar nur 8 Bit lang sind, da hilft nur beim Compiler nachzuschlagen, oder generell uintXX_t nehmen, da weiß man (meistens...), was man bekommt. Evtl. tut's auch "long long", falls das definiert ist. Und ich würde immer "unsigned" für sowas nehmen, bzw. die Signedness generell explizit vorgeben, auch da haben Compiler machmal unterschiedliche Ansichten und können sinnvoller warnen.
- Fritzler
- Beiträge: 12600
- Registriert: So 11. Aug 2013, 19:42
- Wohnort: D:/Berlin/Adlershof/Technologiepark
- Kontaktdaten:
Re: Der AVR-/ARDUINO-Faden
Jetz bin ich verwirrt, sind es denn nun wirklich 25Bit vom Encoder oder ist das nen vertipper und es sind 15 bit?
Ein int ist übrigens immer mind 16bit breit, 8bit int geht laut c standard nicht.
Daher ist es, wie bereits angesprochen, immer eine gute Idee stdint.h zu verwenden.
http://www.cplusplus.com/reference/cstdint/
Für mehr BIts muss mein Code anders lauten, denn aufm AVR GCC kann normalerweise nur 16Bit weit geschoben werden, weil die 1 bei 1<<x als int angelegt wird.
Ein int ist übrigens immer mind 16bit breit, 8bit int geht laut c standard nicht.
Daher ist es, wie bereits angesprochen, immer eine gute Idee stdint.h zu verwenden.
http://www.cplusplus.com/reference/cstdint/
Für mehr BIts muss mein Code anders lauten, denn aufm AVR GCC kann normalerweise nur 16Bit weit geschoben werden, weil die 1 bei 1<<x als int angelegt wird.
Code: Alles auswählen
#define GRAYBITS 25
uint32_t gray_to_bin(uint32_t ENCdata){
uint32_t i, result = ENCdata & (1 << (GRAYBITS-1));
for (i = GRAYBITS - 2; i >= 0; i--){
result |= (ENCdata ^ (result >> 1)) & (((uint32_t)1) << i);
}
return result;
}
Re: Der AVR-/ARDUINO-Faden
Hi
Ja, es ist bereits geschrieben, dass Encoder 25bit Gray-Code raushaut. fünfzwanzig.
das stdint.h ist bereits drin. Ist Standard, den packe ich immer rein, auch wenn mal nicht gebraucht wird.(was sehr selten passiert )
Das Hinweis mit n = int (16bit) beim Bitverschieben ist GOLD wert. D
Genauso hat mir Freund hingewiesen, dass beim C so ist : solange Ergebnisse nicht NULL ist , ist es dann "true" (z.B. auf gesetzte Bit prüfen, " ((PIN & 0x01) == 0x01) ist genauso (PIN & 0x01)
Ja, es ist bereits geschrieben, dass Encoder 25bit Gray-Code raushaut. fünfzwanzig.
das stdint.h ist bereits drin. Ist Standard, den packe ich immer rein, auch wenn mal nicht gebraucht wird.(was sehr selten passiert )
Das Hinweis mit n = int (16bit) beim Bitverschieben ist GOLD wert. D
Genauso hat mir Freund hingewiesen, dass beim C so ist : solange Ergebnisse nicht NULL ist , ist es dann "true" (z.B. auf gesetzte Bit prüfen, " ((PIN & 0x01) == 0x01) ist genauso (PIN & 0x01)
- Bauteiltöter
- Beiträge: 254
- Registriert: So 11. Aug 2013, 17:37
Re: Der AVR-/ARDUINO-Faden
Stimmt, aber der GCC bietet die Option "-mint8" an, mit der wird ein "Int" 8 Bits lang. long ist dann 16 Bits und long long 32Bit.Fritzler hat geschrieben:Ein int ist übrigens immer mind 16bit breit, 8bit int geht laut c standard nicht.
Aber passt, auf die Option ist BÖSE, da sie nicht auf dazu gelinkte Bibliotheken (wie die avr-libc) wirkt. Somit kann man keine FUnktion aus der libc mehr benutzen! Ist für die Praxis also komplett ohne Bedeutung.
anstatt der langen Casts bei Shifts kann man auch ein UL (unsigned long) an die 1 setzen.
Also statt
Code: Alles auswählen
(uint32_t)1 << 30
geht auch
Code: Alles auswählen
1UL << 30
Re: Der AVR-/ARDUINO-Faden
edit.. meine erste Code für Gray-Binar umwandeln ist auch noch falsch, krasse Denkfehler hab ich gemacht: irgendwie unbewusst hab ich EINE HEXdezimale Stell als 8bit breit gehaltet. Merkwürdigweise nur diese Stelle.
@ Fritzler, ist das deswegen , dass du denkt, dass ich Tippfehler gemacht habe (15bit statt 25bit)
verkürzte Varianten von (uint32_t)1 ist 1UL, ist auch korrekt, eben getestet, auch für gut befundet
so perfekt bin ich mit C auch noch nicht..
aber für andere Leute, der einfache Binäre-BCD Umwandlung haben wollte: hab was für euch, es lässt beliebig kaskadieren bzw verkürzen.
(ist aus trollnest.net ähm µC.net, von mir angepasst)
@ Fritzler, ist das deswegen , dass du denkt, dass ich Tippfehler gemacht habe (15bit statt 25bit)
verkürzte Varianten von (uint32_t)1 ist 1UL, ist auch korrekt, eben getestet, auch für gut befundet
so perfekt bin ich mit C auch noch nicht..
aber für andere Leute, der einfache Binäre-BCD Umwandlung haben wollte: hab was für euch, es lässt beliebig kaskadieren bzw verkürzen.
(ist aus trollnest.net ähm µC.net, von mir angepasst)
Code: Alles auswählen
void bin_to_bcd(uint32_t value, unsigned char bcd[10])
{
bcd[0] = value % 10;
value=value/10;
bcd[1] = value % 10;
value=value/10;
bcd[2] = value % 10;
value=value/10;
bcd[3] = value % 10;
value=value/10;
bcd[4] = value % 10;
value=value/10;
bcd[5] = value % 10;
value=value/10;
bcd[6] = value % 10;
value=value/10;
bcd[7] = value % 10;
value=value/10;
bcd[8] = value % 10;
value=value/10;
bcd[9] = value % 10;
value=value/10;
}
Re: Der AVR-/ARDUINO-Faden
Moin,
ich brauche mal eure Hilfe, da ich nicht so oft mit Arduino /µCs arbeite:
Ich habe folgendes Problem. Ich bekomme alle paar Millisekunden einen Impuls(Pulsabstand variiert). Und den Pulsabstand will ich mit einem Faktor verändern, um dann ein neues Signal mit dem neuen Pulsabstand wieder weiterzugeben. Auf PIN 2 kommt das Signal rein, auf 10 soll es wieder raus.
Leider funktioniert das Programm so ganz und gar nicht. Ich wollte das mit veränderten Zeiten und einem Taster + LED testen, aber hat überhaupt nicht funktioniert.
73 Ole
ich brauche mal eure Hilfe, da ich nicht so oft mit Arduino /µCs arbeite:
Ich habe folgendes Problem. Ich bekomme alle paar Millisekunden einen Impuls(Pulsabstand variiert). Und den Pulsabstand will ich mit einem Faktor verändern, um dann ein neues Signal mit dem neuen Pulsabstand wieder weiterzugeben. Auf PIN 2 kommt das Signal rein, auf 10 soll es wieder raus.
Code: Alles auswählen
float korrektur = 1.5;
unsigned long letzter = 0;
int deltat = 0;
void setup() {
pinMode(2, INPUT);
pinMode(10, OUTPUT);
attachInterrupt(digitalPinToInterrupt(2),zeit ,FALLING);
}
void loop() {
digitalWrite(10, HIGH);
delay(korrektur *deltat);
digitalWrite(10, LOW);
delay(5);
}
void zeit() {
deltat = millis() - letzter;
letzter = millis();
}
73 Ole
Re: Der AVR-/ARDUINO-Faden
kleine Geschenke von mir... C-Code für HPDL/DLO1414 Display.... , erstmal nur für 2x Module, gesamt 8 Stelle und noch gewissenmass verbesserungsdürftig
Code: Alles auswählen
///////////////////////// 1414 rountine Library ////////////////////////
// Autor: M.Korn Datum: 22.11.2016
////////////////////////////////////////////////////////////////////////
#include <avr/io.h>
#include <util/delay.h>
#include <stdint.h>
#define LED_DDR DDRB // Adresseleitung, Richtungsregister.
#define LED_PORT PORTB // Adresseleitung
#define LED_DDR_DATA DDRD // Datenleitung, Richtungsregister
#define LED_DATA PORTD // Datenleitung
#define LED_WR PD7 // Schreib-Ausgang /WRITE
#define Stelle 8 // eine 1414 Module = 4 Stelle, hier 2x Module = 8 Stelle
#define AdrBreite 0x07 // 0x07 = b00000111 = 3x Adresseleitung = 2hoch 3 = 8 Stelle
// Prototypen
void int1414 ();
void data1414 (char data);
void reset1414 ();
void set1414 (char data, char column);
void string1414(char string[]);
// initalisierte Werte
char string[];
int column1414 = 0;
// int1414 (); // beispielcode, zwingend fur korrekt Funktion, mit Zuweisung von Port.
void int1414 (){
LED_DDR = AdrBreite; //Adresseleitung
LED_DDR_DATA = 0xFF; // Datenleitung
int column1414=0;
for(int i=0; i<Stelle; i++){
LED_PORT = (column1414 & AdrBreite); // Adresse an Port setzen (3bit-Adresse, kaskadierbar durch Maske)
LED_DATA &= ~ (1<<LED_WR); // Werte schreiben, /WRITE auf LOW setzen.
LED_DATA = 0x20; // Leerzeichen an Port füttern
LED_DATA |= (1<<LED_WR ); // schreiben beenden /WRITE auf HIGH setzen.
column1414++; // Adressezähler
}
reset1414 ();
}
// data1414 ( 0x30 & bcd[0]); // beispiel-code, für Datensenden an 1414, inkrementale Stellenpostition.
void data1414 (char data ) { // 1414 mit Daten speisen, inkremental
LED_PORT = (column1414 & AdrBreite); // Adresse an Port setzen (3bit-Adresse, kaskadierbar durch Maske)
LED_DATA &= ~(1<<LED_WR); // Werte schreiben, /WRITE auf LOW setzen.
LED_DATA = (data & 0x7F); // Daten an Port füttern
LED_DATA |= (1<<LED_WR ); // schreiben beenden /WRITE auf HIGH setzen.
column1414--; // Adressezähler
}
// reset1414 (); // Beispielcode für zurücksetzen nach nutzung von Funktion "data1414"
void reset1414 () {
column1414 = Stelle-1; // Adressezähler auf "NULL" setzen
}
// set1414 (0x30 & bcd[1]); // beispielcode
void set1414 (char data, char column) { // gewünschte Stelle mit Daten füttern, nicht inkremental
column1414 = column; // Port mit gewünschte Adresse speisen.
LED_PORT = (column1414 & AdrBreite); // Adresse an Port setzen (3bit-Adresse, kaskadierbar durch Maske)
LED_DATA &= ~(1<<LED_WR); // Werte schreiben, /WRITE auf LOW setzen.
LED_DATA = (data & 0x7F); // Daten an Port füttern
LED_DATA |= (1<<LED_WR ); // schreiben beenden /WRITE auf HIGH setzen.
}
// string1414 ("hello") ; // Beispielcode
void string1414(char string[]) { // String an 1414 schicken.
for(int i=0; i<Stelle; i++) { //for-Schleife
data1414 (string[i]); // Untenfunktion "data1414" mit Array-Daten füttern
}
reset1414; // Adressezähler zurücksetzen.
}
Re: Der AVR-/ARDUINO-Faden
Hallo,
wieder einmal fehlt es mir an Masse.
Nach dem Kompilieren ... das.
avr-g++: error: missing filename after '-o'
exit status 1
/*
LiquidCrystal Library - Hello World
Demonstrates the use a 16x2 LCD display. The LiquidCrystal
library works with all LCD displays that are compatible with the
Hitachi HD44780 driver. There are many of them out there, and you
can usually tell them by the 16-pin interface.
This sketch prints "Hello World!" to the LCD
and shows the time.
The circuit:
* LCD RS pin to digital pin 12
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 5
* LCD D5 pin to digital pin 4
* LCD D6 pin to digital pin 3
* LCD D7 pin to digital pin 2
* LCD R/W pin to ground
* LCD VSS pin to ground
* LCD VCC pin to 5V
* 10K resistor:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3)
Library originally added 18 Apr 2008
by David A. Mellis
library modified 5 Jul 2009
by Limor Fried (http://www.ladyada.net)
example added 9 Jul 2009
by Tom Igoe
modified 22 Nov 2010
by Tom Igoe
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/LiquidCrystal
*/
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("hello, world!");
}
void loop() {
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 1);
// print the number of seconds since reset:
lcd.print(millis() / 1000);
}
Danke und Gruß Daniel
wieder einmal fehlt es mir an Masse.
Nach dem Kompilieren ... das.
avr-g++: error: missing filename after '-o'
exit status 1
/*
LiquidCrystal Library - Hello World
Demonstrates the use a 16x2 LCD display. The LiquidCrystal
library works with all LCD displays that are compatible with the
Hitachi HD44780 driver. There are many of them out there, and you
can usually tell them by the 16-pin interface.
This sketch prints "Hello World!" to the LCD
and shows the time.
The circuit:
* LCD RS pin to digital pin 12
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 5
* LCD D5 pin to digital pin 4
* LCD D6 pin to digital pin 3
* LCD D7 pin to digital pin 2
* LCD R/W pin to ground
* LCD VSS pin to ground
* LCD VCC pin to 5V
* 10K resistor:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3)
Library originally added 18 Apr 2008
by David A. Mellis
library modified 5 Jul 2009
by Limor Fried (http://www.ladyada.net)
example added 9 Jul 2009
by Tom Igoe
modified 22 Nov 2010
by Tom Igoe
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/LiquidCrystal
*/
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("hello, world!");
}
void loop() {
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 1);
// print the number of seconds since reset:
lcd.print(millis() / 1000);
}
Danke und Gruß Daniel
Re: Der AVR-/ARDUINO-Faden
Code sieht völlig für Arduino aus, wenn ich ihre Pinbelegung ansehen.. Ich benutze Arduino nicht, aber ihre Platine ist sehr willkommend bei mir. (wo gibt billige Atmega328 mit ganze Teile drum drauf)
https://forum.arduino.cc/index.php?topic=385234.0
Hier schreibt, dass IDE putt ist, Update/Neuinstallierung auf neuere Version löst Problem, ohne den genauerer gelesen zu habe.
https://forum.arduino.cc/index.php?topic=385234.0
Hier schreibt, dass IDE putt ist, Update/Neuinstallierung auf neuere Version löst Problem, ohne den genauerer gelesen zu habe.
Re: Der AVR-/ARDUINO-Faden
Ich habe den Verdacht, daß diese Fehlermeldung eher auf einen falsche Befehlszeile, als auf einen fehlerhaften Quellcode hinweist Wie sah denn der Compileraufruf aus? Kann es sein, daß kein Dateiname für das "Ergebnis" angegeben ist?Daniel hat geschrieben:avr-g++: error: missing filename after '-o'
Re: Der AVR-/ARDUINO-Faden
Hallo ich kriege das nicht hin, hier die Fehlermeldung komplett.
Arduino: 1.6.6 (Windows 7), Board: "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"
avr-g++: error: missing filename after '-o'
exit status 1
Fehler beim Kompilieren.
Ungültige Bibliothek C:\Users\quinta\Documents\Arduino\libraries\Bridge in C:\Users\quinta\Documents\Arduino\libraries\Bridge gefunden
Ungültige Bibliothek C:\Users\quinta\Documents\Arduino\libraries\Bridge in C:\Users\quinta\Documents\Arduino\libraries\Bridge gefunden
Dieser Report hätte mehr Informationen mit
"Ausführliche Ausgabe während der Kompilierung"
aktiviert in Datei > Einstellungen.
Hallo,
ich habe wahrscheinlich ein Problem mit allen drei Arduino,
Wie kann ich diesen wieder den aktuellen Treiber einimpfen???
Ich bin da absolut neben der Spur.
Danke und Gruß
Arduino: 1.6.6 (Windows 7), Board: "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"
avr-g++: error: missing filename after '-o'
exit status 1
Fehler beim Kompilieren.
Ungültige Bibliothek C:\Users\quinta\Documents\Arduino\libraries\Bridge in C:\Users\quinta\Documents\Arduino\libraries\Bridge gefunden
Ungültige Bibliothek C:\Users\quinta\Documents\Arduino\libraries\Bridge in C:\Users\quinta\Documents\Arduino\libraries\Bridge gefunden
Dieser Report hätte mehr Informationen mit
"Ausführliche Ausgabe während der Kompilierung"
aktiviert in Datei > Einstellungen.
Hallo,
ich habe wahrscheinlich ein Problem mit allen drei Arduino,
Wie kann ich diesen wieder den aktuellen Treiber einimpfen???
Ich bin da absolut neben der Spur.
Danke und Gruß
Zuletzt geändert von Daniel am Mi 28. Dez 2016, 11:26, insgesamt 1-mal geändert.
Re: Der AVR-/ARDUINO-Faden
Anscheinend arbeitest du mit einer IDE, die "auf Klick" Befehle an eine Shell oder andere Programme absetzt, und der (so aufgerufene) eigentliche Compiler beklagt sich darüber, daß ihm ein Parameter in der Befehlszeile fehlt. Hast du mit dieser IDE schon irgend etwas kompiliert bekommen? Schau' dir mal die Konfiguration (insbesondere die Pfade für verschiedene Dateien) deiner IDE genauer an, da scheint mir etwas zu fehlen... Sorry, aber "here no M$, Linux only...", daher kann ich dir nur mitteilen, daß der Compiler m.E. darüber meutert, daß er keine Info darüber bekommt, wo er sein Kompilat hin schreiben soll -> Ggf. fehlt da ein Pfad in der Konfiguration.Daniel hat geschrieben:Fehler beim Kompilieren.
-
- Beiträge: 3261
- Registriert: Mo 12. Aug 2013, 19:47
Re: Der AVR-/ARDUINO-Faden
Je nach IDE (Anjuta z.B.) kann es auch nötig sein, nach dem Entfernen / Anlegen / Importieren zusätzlicher Bibliotheken oder Files das Projekt / Makefile vollständig zu "bereinigen" und neu zu erstellen. Ansonsten gibt es solche merkwürdige Fehler.
Re: Der AVR-/ARDUINO-Faden
Danke, nur bin damit überfordert und hätte paar Hinweise.
Danke und Gruß Daniel
Danke und Gruß Daniel
Re: Der AVR-/ARDUINO-Faden
ne Frage über Thema Interrupt.
Ist meine Annahme korrekt, dass beim Comparate Timer Clear Match, beim überstimmende Werte sofort Timer auf Null gesetzt wird, vor Start des Interrupt rountine Service ?
Ist meine Annahme korrekt, dass beim Comparate Timer Clear Match, beim überstimmende Werte sofort Timer auf Null gesetzt wird, vor Start des Interrupt rountine Service ?
- Fritzler
- Beiträge: 12600
- Registriert: So 11. Aug 2013, 19:42
- Wohnort: D:/Berlin/Adlershof/Technologiepark
- Kontaktdaten:
Re: Der AVR-/ARDUINO-Faden
Jo.
Der Compare resettet den Timer und setzt das IRQ Flag.
Der CPU kern bekommt mit, dass das IRQ Flag gesetzt ist und springt zur IRQ Routine.
-> Timer schon längst resettet bei Ausführung der IRQ Routine
Der Compare resettet den Timer und setzt das IRQ Flag.
Der CPU kern bekommt mit, dass das IRQ Flag gesetzt ist und springt zur IRQ Routine.
-> Timer schon längst resettet bei Ausführung der IRQ Routine
Re: Der AVR-/ARDUINO-Faden
Kopfklatsch, stimmt .. dass der Flag in Timer-Interrupt-Register (TIFR) auslösend für Interruptrountine ist. Da ist schon längst Timer auf 0 resettet.
Aber egal, danke für Betätigung und Denkanstoss .
Aber egal, danke für Betätigung und Denkanstoss .
Arduino Erste Schritte, einfache Tips
Hallo,
da ich ja nun etwas mit Mokrocontrollern rumbastel möchte und ich mir nicht gleich mit allen Bauteilen eindecken kann und mir meinen kleinen Arduino Micro auch nicht gleich zerschießen möchte....
Hat hier jemand Tips´was man unbedingt braucht für den Anfang
Was kann ich tun gegen grobe Fehler. Schutzbeschaltung für Verpolung Überspannung, zu viel Strom??
Was ich habe.... schon eine kleine Sammlung diverser Wiederstände, einige LED´s, Taster, Schalter
Bausatz Anzeigeeinheit 6-fach für Low/high (5V)
Bausatz Signalausgabeeinheit 4 Bit eigentlich das gleiche wie oben nur mit 4 LED Der genaue Unterschied erschließt sich mir gerade nicht, vermutlich für unterschiedliche Ströme
Arduino Micro + Handbuch
Arduino Handbuch PDF
Billige Lötstation, Multimeter, großes Brett mit PC Netzteil, wo ich diverse Spannungen auf Bananenstecker herausgeführt hab.
Was hab ich bis jetzt gemacht? Bausätze zusammengelötet (ich brauch unbedingt besseres Licht) man wie lange hab ich schon keine Platinen mehr verlötet
Den Arduino die LED blinken lassen, und das Blink programm zu einem SOS Blinker umgebastelt.
Achja, und das große Brett aus der Garage ausgegraben
da ich ja nun etwas mit Mokrocontrollern rumbastel möchte und ich mir nicht gleich mit allen Bauteilen eindecken kann und mir meinen kleinen Arduino Micro auch nicht gleich zerschießen möchte....
Hat hier jemand Tips´was man unbedingt braucht für den Anfang
Was kann ich tun gegen grobe Fehler. Schutzbeschaltung für Verpolung Überspannung, zu viel Strom??
Was ich habe.... schon eine kleine Sammlung diverser Wiederstände, einige LED´s, Taster, Schalter
Bausatz Anzeigeeinheit 6-fach für Low/high (5V)
Bausatz Signalausgabeeinheit 4 Bit eigentlich das gleiche wie oben nur mit 4 LED Der genaue Unterschied erschließt sich mir gerade nicht, vermutlich für unterschiedliche Ströme
Arduino Micro + Handbuch
Arduino Handbuch PDF
Billige Lötstation, Multimeter, großes Brett mit PC Netzteil, wo ich diverse Spannungen auf Bananenstecker herausgeführt hab.
Was hab ich bis jetzt gemacht? Bausätze zusammengelötet (ich brauch unbedingt besseres Licht) man wie lange hab ich schon keine Platinen mehr verlötet
Den Arduino die LED blinken lassen, und das Blink programm zu einem SOS Blinker umgebastelt.
Achja, und das große Brett aus der Garage ausgegraben
- Geistesblitz
- Beiträge: 1934
- Registriert: Di 5. Nov 2013, 17:53
- Wohnort: Dresden
Re: Arduino Erste Schritte, einfache Tips
Ich finde diese Standard-Zeichendisplays sehr praktisch zum debuggen, da kann man sich dann beim Laufen Werte anzeigen lassen. Mit ein bisschen Getrickse geht sowas auch mit LEDs, aber so ein Display ist weniger umständlich und leichter zu deuten. Bei meiner letzten Chinabestellung hab ich mir auch einen Haufen solcher Experimentierkabel geholt, von allen Sorten (Male-to-Male, Male-to-Female und Female-to-Female), die braucht man auch irgendwie ständig. Ein ausreichend großes Breadboard hast du? Ich hab eins mit zwei Bananenbuchsen drin, da kann man dann sein umgebautes PC-Netzteil ganz einfach anstöpseln. Zwischen dem Controllerboard und dem Breadboard kommen dann die Experimantierkabel zum Einsatz. Die 5V schließ ich meist schon gar nicht mehr extra an, die lass ich einfach vom USB kommen. Ansonsten sind Trimmpotis auch immer mal ganz praktisch, wenn man mal irgendwie Analogwerte braucht, lassen sich ja einfach über den integrierten ADC auswerten.
Re: Arduino Erste Schritte, einfache Tips
Breadboard steht schon auf der will haben.
Ansonsten nur das gang kleine, etwas größer wie der Miro.
Ansonsten hab ich das große Brett zu mdraufnageln, da kann ich meine Bausätze auch drauf spaxen
Was für Verbindungskabel meinst du? Ich hätte für das Breadboard einfach 0,6 oder 0,8 Telefonleitung genommen
MFG Thorsten
Ansonsten nur das gang kleine, etwas größer wie der Miro.
Ansonsten hab ich das große Brett zu mdraufnageln, da kann ich meine Bausätze auch drauf spaxen
Was für Verbindungskabel meinst du? Ich hätte für das Breadboard einfach 0,6 oder 0,8 Telefonleitung genommen
MFG Thorsten
- Geistesblitz
- Beiträge: 1934
- Registriert: Di 5. Nov 2013, 17:53
- Wohnort: Dresden
Re: Arduino Erste Schritte, einfache Tips
Nimm lieber kein zu kleines Breadboard, wenn man mal mehrere ICs braucht (die normalerweise über dem mittleren Steg eingesteckt werden) kann der Platz schnell eng werden. Ich hab so ein ähnliches, allerdings wäre eins mit einem weiteren Bananenstecker praktischer:
Da muss man aber manchmal aufpassen, die Versorgungsleisten gehen bei den längeren Boards gerne mal nicht durch, sondern sind in der Mitte geteilt. Entweder man steckt da Drahtbrücken rein oder man lötet die innen zusammen.
Es kann auch nicht schaden, eins als Ersatz zu haben, dann braucht man bei parallelen Projekten nicht immer alles herunterreißen. Ich hab bisher auch nur die billigen Breadboards, reichen eigentlich völlig. Gibt die auch in ganz schön teuer, seh da aber irgendwie den Sinn nicht. Gut, die leiern bestimmt nicht so schnell aus, aber so viel mach ich damit auch nicht. Wenn ich etwas aufgebaut hab, was funktioniert und was ich noch öfter brauchen werd, wirds eh auf Lochraster permanent nachgebaut.
Ich mein solche Kabel, das hier ist sogar ein ziemlich günstiges Angebot gleich aus Deutschland:
http://www.ebay.de/itm/3Pcs-Dupont-Drah ... c7A7LLaL2Q
Am besten gleich die 20cm-Version nehmen (oder beide). Die Kabel kann man einfach vom Strang als einzelne abziehen. Das mit der Telefonleitung geht auch, allerdings nur als Male-to-Male, für die Buchsen müsste man sich erst was einfallen lassen. Für Verbindungen auf dem Steckbrett hab ich aber auch Kabelstückchen in verschiedenen Längen und kleine Drahtbrücken (aus abgekniffenen Bauteilbeinchen )
Da muss man aber manchmal aufpassen, die Versorgungsleisten gehen bei den längeren Boards gerne mal nicht durch, sondern sind in der Mitte geteilt. Entweder man steckt da Drahtbrücken rein oder man lötet die innen zusammen.
Es kann auch nicht schaden, eins als Ersatz zu haben, dann braucht man bei parallelen Projekten nicht immer alles herunterreißen. Ich hab bisher auch nur die billigen Breadboards, reichen eigentlich völlig. Gibt die auch in ganz schön teuer, seh da aber irgendwie den Sinn nicht. Gut, die leiern bestimmt nicht so schnell aus, aber so viel mach ich damit auch nicht. Wenn ich etwas aufgebaut hab, was funktioniert und was ich noch öfter brauchen werd, wirds eh auf Lochraster permanent nachgebaut.
Ich mein solche Kabel, das hier ist sogar ein ziemlich günstiges Angebot gleich aus Deutschland:
http://www.ebay.de/itm/3Pcs-Dupont-Drah ... c7A7LLaL2Q
Am besten gleich die 20cm-Version nehmen (oder beide). Die Kabel kann man einfach vom Strang als einzelne abziehen. Das mit der Telefonleitung geht auch, allerdings nur als Male-to-Male, für die Buchsen müsste man sich erst was einfallen lassen. Für Verbindungen auf dem Steckbrett hab ich aber auch Kabelstückchen in verschiedenen Längen und kleine Drahtbrücken (aus abgekniffenen Bauteilbeinchen )
- Geistesblitz
- Beiträge: 1934
- Registriert: Di 5. Nov 2013, 17:53
- Wohnort: Dresden
Re: Arduino Erste Schritte, einfache Tips
Ich lad als Beispiel einfach mal das hoch, was ich gerade hier aufm Tisch kliegen hab. Projekt: Tester für Schrittmotoren. Da sieht man schonmal die meisten genannten Sachen im Einsatz.
Re: Arduino Erste Schritte, einfache Tips
Glaube eines ist bei dir im Paket gelandet. In der 70er Jahre Trendfarbe orangeToddybaer hat geschrieben:Breadboard steht schon auf der will haben.
Re: Arduino Erste Schritte, einfache Tips
Auf das Paket bin ich mal gespannt.
Orage war vor kurzem wieder bei Tupperware im Kommen...
Orage war vor kurzem wieder bei Tupperware im Kommen...
Re: Arduino Erste Schritte, einfache Tips
Völlig zurecht Gerade bei Leuten, die viel im Forum schreiben, kann man viel präzisere Aale mitschicken.Toddybaer hat geschrieben:Auf das Paket bin ich mal gespannt.
Re: Arduino Erste Schritte, einfache Tips
So, es geht vorran.
Onboard LED blinken geht
Programm umgeschrieben, kann jetzt auch SOS blinken
Heute versucht LCD anzuklemmen.
Der Nano und der Micro haben unterschiedliche PIN´s !!
Externe Spannungsversorgung über PC Netzteil. Im Buch steht zwar das man den nicht mit weniger als 7V versogen soll, weil bei Spannungen zwischen 5 und 7 V die Funktion nicht sicher gewährleistet werden kann. Läuft mit 5 V aber scheinbar ganz gut, hat den Vorteil das ich nur eine Spannungsquelle benötige.
Zur Not hätte das Netzteil auch noch 7 und 12 V zur Verfügung gehabt.
Hab dann mal alle 4 vorhandenen LCD durchprobiert, funktionieren alle, eines hat keine Hintergrundbeleuchtung. Mir hat sich eine Quelle für diese LCD´s aufgetan. UNd praktischer weise gleich mit Gehäuseteil dran.
Ja... und nun ?
Vorschläge für erste Schaltungen und Programmierungen? Bis jetzt hab ich ja nur fertige Programme aufgespielt
Onboard LED blinken geht
Programm umgeschrieben, kann jetzt auch SOS blinken
Heute versucht LCD anzuklemmen.
Der Nano und der Micro haben unterschiedliche PIN´s !!
Externe Spannungsversorgung über PC Netzteil. Im Buch steht zwar das man den nicht mit weniger als 7V versogen soll, weil bei Spannungen zwischen 5 und 7 V die Funktion nicht sicher gewährleistet werden kann. Läuft mit 5 V aber scheinbar ganz gut, hat den Vorteil das ich nur eine Spannungsquelle benötige.
Zur Not hätte das Netzteil auch noch 7 und 12 V zur Verfügung gehabt.
Hab dann mal alle 4 vorhandenen LCD durchprobiert, funktionieren alle, eines hat keine Hintergrundbeleuchtung. Mir hat sich eine Quelle für diese LCD´s aufgetan. UNd praktischer weise gleich mit Gehäuseteil dran.
Ja... und nun ?
Vorschläge für erste Schaltungen und Programmierungen? Bis jetzt hab ich ja nur fertige Programme aufgespielt
- Geistesblitz
- Beiträge: 1934
- Registriert: Di 5. Nov 2013, 17:53
- Wohnort: Dresden
Re: Arduino Erste Schritte, einfache Tips
Die Projekte sollten von alleine kommen, vielleicht erstmal nur ein paar Spielereien (zB. ist es ganz witzig, eine einfache Menüführung für das LCD zu programmieren, mit ein paar Tastern zur Navigation) und sonst immer mal umgucken, ob einem für irgendwas vielleicht mal eine Idee kommt. Manchmal kommen eiem auch Ideen, wenn man sich Beispielprogramme genauer anguckt und man versucht, diese zu verbessern oder auszubauen.
Wenns wirklich genau 5V sind kannst auch den VIN-Pin umgehen und die direkt auf den +5V-Pin geben, brauchst dann ja keinen Spannungsregler.
Wenns wirklich genau 5V sind kannst auch den VIN-Pin umgehen und die direkt auf den +5V-Pin geben, brauchst dann ja keinen Spannungsregler.
7 Segmentanzeige mit integriertem Kontroller Anschluss??
Hallo,
habe hier eine 4 Stellige, 7 Segmentanzeige und würde die gerne an mit dem Arduiono ansteuern.
Auf der Segmentanzeige befindet sich ein Kontroller von motorola ( 14489BDW ) Angeschlossen wird das ganze über ein 10 pol. Flachbandkabel, das hab ich ja bereits auf die Platine bekommen.
Nur wie klemm ich das jetzt an den Arduino an und mit welcher Libery muss ich den füttern, damit der da Zahlen anzeigen kann?
Scheinbar sind nicht alle Leitungen des Flachbandkabels belegt. Ein Pin ist mit + bezeichnet, da würd ich jetzt einmal plus anklemmen. Im Datenblatt des Kontrollers stand was von nicht inbegriffenen Resistor, also würde ich generell ersteinmal einen mit davor schalten.
Und das eine Leitung die Datenleitung sein muss.
Nur.... welche Leitung? und was für Daten müssen da dran???
Ansonsten steht noch auf der Platine
FASE
CF-94V-0 CS269A
Hat da jemand eine Idee??
habe hier eine 4 Stellige, 7 Segmentanzeige und würde die gerne an mit dem Arduiono ansteuern.
Auf der Segmentanzeige befindet sich ein Kontroller von motorola ( 14489BDW ) Angeschlossen wird das ganze über ein 10 pol. Flachbandkabel, das hab ich ja bereits auf die Platine bekommen.
Nur wie klemm ich das jetzt an den Arduino an und mit welcher Libery muss ich den füttern, damit der da Zahlen anzeigen kann?
Scheinbar sind nicht alle Leitungen des Flachbandkabels belegt. Ein Pin ist mit + bezeichnet, da würd ich jetzt einmal plus anklemmen. Im Datenblatt des Kontrollers stand was von nicht inbegriffenen Resistor, also würde ich generell ersteinmal einen mit davor schalten.
Und das eine Leitung die Datenleitung sein muss.
Nur.... welche Leitung? und was für Daten müssen da dran???
Ansonsten steht noch auf der Platine
FASE
CF-94V-0 CS269A
Hat da jemand eine Idee??
Re: 7 Segmentanzeige mit integriertem Kontroller Anschluss??
Hallo,
erste Anlaufstelle ist wie immer das Datenblatt. Hier das von dem MC14489B:
http://pdf.datasheetcatalog.com/datashe ... 14489B.pdf
Um die Pinbelegung des Kabels herauszufinden kann man mit dem Durchgangsprüfer testen, welche Pins des ICs am Flachbandkabel herauskommen.
Viele Grüße,
Bernhard
Nachtrag:
Bei dem Treiber kann man den Ausgangsstrom über einen einzelnen Widerstand festlegen.
Das Interface ist ab Seite 6 beschrieben. Im Grunde genommen ist das ein SPI.
erste Anlaufstelle ist wie immer das Datenblatt. Hier das von dem MC14489B:
http://pdf.datasheetcatalog.com/datashe ... 14489B.pdf
Um die Pinbelegung des Kabels herauszufinden kann man mit dem Durchgangsprüfer testen, welche Pins des ICs am Flachbandkabel herauskommen.
Viele Grüße,
Bernhard
Nachtrag:
Bei dem Treiber kann man den Ausgangsstrom über einen einzelnen Widerstand festlegen.
Das Interface ist ab Seite 6 beschrieben. Im Grunde genommen ist das ein SPI.
Re: 7 Segmentanzeige mit integriertem Kontroller Anschluss??
Hallo,
was ist ein SPI??
das diese Datenblätter auch immer auf Englisch sein müssen
was ist ein SPI??
das diese Datenblätter auch immer auf Englisch sein müssen